uibutton将它设置在uitableview的uitableviewcell中

时间:2011-10-31 17:31:42

标签: objective-c ios uitableview

我在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];
    }
}

任何帮助表示赞赏!感谢。

1 个答案:

答案 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;
祝你好运