2013-06-30 117 views
5

我有一个UITableView自定义单元格。在每个UITableViewCell中,都有一个UIButton。我试图找出按钮在被点击时位于哪个单元格中。要做到这一点,我已经做到了这一点:调用时崩溃indexPathForCell

- (IBAction)likeTap:(id)sender { 


UIButton *senderButton = (UIButton *)sender; 
UITableViewCell *buttonCell = (UITableViewCell *)[senderButton superview]; 
UITableView* table = (UITableView *)[buttonCell superview]; 
NSIndexPath *pathOfTheCell = [table indexPathForCell:buttonCell]; 
NSInteger rowOfTheCell = [pathOfTheCell row]; 
NSLog(@"rowofthecell %d", rowOfTheCell); 

我认为这将很好地工作,但是当indexPathForCell被调用时,会抛出异常。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCell indexPathForCell:]: unrecognized selector sent to instance 0x756d650' 

什么,我做错了任何想法? 谢谢!

回答

6

这是你的问题:

(UITableViewCell *)[senderButton superview] 

它应该是:

(UITableViewCell *)[[senderButton superview] superview] 

因为按钮的超级视图不是单元格,所以是contentView的哪个子视图。

+0

它的工作!谢谢! – user2535943

+0

注意:这将适用于iOS7,但不适用于iOS6! –

+0

你节省了我的时间,很多thanx。 – Vigor

2

为什么你没有在你的cellForRowAtIndexPath方法中设置标签为每个按钮:

button.tag = indexPath.row; 

,然后在你的方法,你必须:

- (IBAction)likeTap:(id)sender { 
    NSLog(@"rowofthecell %d", button.tag); 
} 
1

要么你可以通过edzio27的建议,或者你可以尝试使用introspection为每个按钮设置标签,如下图所示:

- (IBAction)likeTap:(UIButton *)sender { 

    UIButton *senderButton = (UIButton *)sender; 

    if ([senderButton.superView isKindOfClass:[UITableViewCell class]]) { 
     UITableViewCell *buttonCell = (UITableViewCell *)[senderButton superview]; 

     if ([buttonCell.superView isKindOfClass:[UITablewView class]]) { 
      UITableView* table = (UITableView *)[buttonCell superview]; 

      NSIndexPath *pathOfTheCell = [table indexPathForCell:buttonCell]; 
      NSInteger rowOfTheCell = [pathOfTheCell row]; 
      NSLog(@"rowofthecell %d", rowOfTheCell); 
     } 
    }   
} 
2

我使用自定义的UITableViewCell和我有一个崩溃过上ios7

在iOS 6中,它就像一个魅力

UITableViewCell *cell=(UITableViewCell*)[[sender superview] superview]; 
UITableView *table=(UITableView*)[cell superview]; 
NSIndexPath *path=[[sender superview] indexPathForCell:cell]; 

上ios7,这上面的代码崩溃,工作

此代码的工作就ios7但我不明白为什么...

UITableViewCell *cell = (UITableViewCell*)[[sender superview] superview]; 
UITableView *table = [[(UITableView*)[cell superview] superview] superview]; 
NSIndexPath *path=[[sender superview] indexPathForCell:cell]; 

所以我用edzio27答案。我在我的按钮上设置了一个标签。

+0

以下是在iOS6和iOS7上工作的解决方案http://stackoverflow.com/a/19651825/1294448 –

相关问题