我在UITableView的UITableViewCell中有一个UIButton。 UIButton是隐藏的。当用户用手指在特定的UITableViewCell上向左滑动时,按钮就会出现。
我使用此代码来实现它并且它正在工作但是按钮显示在多个uitableviewcells中,而不是用户滑动手指的那个!
- (void)cellSwiped:(UIGestureRecognizer *)gestureRecognizer
{
if (gestureRecognizer.state == UIGestureRecognizerStateEnded)
{
UIView *tappedview=[gestureRecognizer.view hitTest:[gestureRecognizer locationInView:gestureRecognizer.view] withEvent:nil];
UIView *contentview1=tappedview.superview;
UIView *viewwithtag4=[contentview1 viewWithTag:7009];
UIButton *button2=(UIButton *)viewwithtag4;
NSLog(@"swipe left detected");
[button2 setHidden:FALSE];
}
}
任何帮助表示赞赏!感谢。
答案 0 :(得分:0)
如果滚动后按钮显示在错误的单元格中,则因为tableView正在重复使用tableCells以提高性能。即。
如果要保持特定单元格的按钮可见,则必须执行以下操作:
在gestureRecognizer调用的方法中保存按钮的状态。您必须确定已刷过的单元格,然后将该状态保存在您填充单元格的类/模型中。即你的数据来源。例如,如果您的数据源是数组中的对象,则可以执行某些操作
// in your cellSwiped method and assuming you can traverse the view hierarchy to get
// the tableViewCell.
NSIndexPath *theCellIndexPath=[self.tableView indexPathForCell: theTableViewCell];
MyDataSourceObject *theDataSourceObject=[dataObjectArray objectAtIndex: theCellIndexPath.row];
// The buttonIsVisible ivar for your data source could be name that
// or something else that is meaningful. Not sure what the button i
// related to in you objects
theDataSourceObject.buttonIsVisible=YES // or you could put in code to toggle the value
然后在您的cellForRowAtIndexPath方法中,您必须将按钮设置为隐藏或不隐藏,具体取决于该特定indexPath的状态。
MyDataSourceObject *theDataSourceObject=[dataObjectArray objectAtIndex: indexPath.row];
cell.button.hidden=theDataSourceObject.buttonIsVisible;
return cell;
祝你好运