获取UIButton的UITableViewCell?

我正在尝试使用UIButton执行segue, UIButton位于名为GFHomeCell的自定义UITableViewCell类中。

GFHomeCell有一个postID属性,我想在准备segue时发送它。 我设置了一个按下按钮时运行的方法; 但是,在按下按钮的方法中,我需要发送者是GFHomeCell (或者至少是我所假设的)。

有没有人有任何想法我怎么能这样做? 这是我的代码

我的cellForRowAtIndexPath

  GFHomeCell *cell = [tableView dequeueReusableCellWithIdentifier:@"newsfeedCell" forIndexPath:indexPath]; NSDictionary *rootObject = self.posts[indexPath.row]; NSDictionary *post = rootObject[@"post"]; NSDictionary *group = post[@"group"]; NSString *groupName = group[@"name"]; cell.actionLabel.text = [NSString stringWithFormat:@"New post trending on %@", groupName]; cell.descriptionLabel.text = post[@"body"]; cell.descriptionLabel.numberOfLines = 0; cell.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping; cell.likesLabel.text = [NSString stringWithFormat:@"%@", post[@"likes"]]; cell.postId = post[@"id"]; cell.groupName = group[@"name"]; cell.postBody = post[@"body"]; cell.likeButton.tag = indexPath.row; [cell.likeButton addTarget:self action:@selector(likeButtonClick:) forControlEvents:(UIControlEvents)UIControlEventTouchDown]; [cell.commentButton addTarget:self action:@selector(commentButtonClick:) forControlEvents:(UIControlEvents)UIControlEventTouchDown]; NSString *urlString = [NSString stringWithFormat:@"%s/%@", kBaseURL, @"images/"]; NSURL *url = [NSURL URLWithString:urlString]; [cell.imageView setImageWithURL:url placeholderImage:[UIImage imageNamed:@"Newsfeed-Image-Placeholder"]]; return cell; 

这是我点击按钮时运行的方法。 我的想法是我需要这里的发送者是一个单元格,而不是一个按钮,因为我在prepareForSegue发送的postId属性只存在于GFHomeCell

 - (void)commentButtonClick:(id)sender { [self performSegueWithIdentifier:@"addCommentSegue" sender:sender]; } 

最后我的prepareForSegue (我只包括与此segue相关的部分):

 } else if ([segue.identifier isEqualToString:@"addCommentSegue"]) { GFPostShowViewController *destViewController = segue.destinationViewController; GFHomeCell * cell = sender; destViewController.postId = [cell.postId copy]; destViewController.groupName = [cell.groupName copy]; destViewController.postBody = [cell.postBody copy]; } else {} 

我是iOS新手,这让我很难过,所以任何帮助都会非常感激,谢谢。

这种情况基本上有两种常见的方法。 一种是通过按钮的超级搜索搜索,直到找到单元格。 您不应该依赖于上升一个或两个级别,因为层次结构在过去已经发生了变化,并且可能会再次发生变化(您需要在iOS 6中上升两级,但在iOS 7中需要上升三级)。 你可以这样做,

 -(void)commentButtonClick:(UIButton *) sender { id superView = sender.superview; while (superView && ![superView isKindOfClass:[UITableViewCell class]]) { superView = [superView superview]; } [self performSegueWithIdentifier:@"addCommentSegue" sender:superView]; } 

另一种方法是在cellForRowAtIndexPath中为您的按钮分配一个标签:等于indexPath.row(如果您只有一个部分),然后使用sender.tag获取包含轻触按钮的单元格的indexPath。

好吧,一个答案就是在视图层次结构中上升一个级别:

  - (void)commentButtonClick:(id)sender { GFHomeCell * cell = (GFHomeCell *) [(UIButton*)sender superview]; if (cell && [cell Class] == [GFHomeCell class]) { //do whatever with cell.postID [self performSegueWithIdentifier:@"addCommentSegue" sender:sender]; } } 

哦,我忘记了…你可能需要上升两级才能超越contentView属性:

  GFHomeCell * cell = (GFHomeCell *) [[(UIButton*)sender superview] superview];