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

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

有谁知道我该怎么做?这是我的代码

我的postId

        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中发送的GFHomeCell属性仅存在于prepareForSegue上:

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


最后,我的(我只包括与该命令有关的部分):

} 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。

10-08 16:59