我正在尝试使用UIButton
执行segue,UITableViewCell
位于名为GFHomeCell
的自定义GFHomeCell
类中。
postID
有一个GFHomeCell
属性,我想在准备segue时发送它。我设置了一个按下按钮时运行的方法;但是,在按下按钮的方法中,我需要发送者是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;
:
postId
这是我点击按钮时运行的方法。我的想法是我需要这里的发件人是一个单元格,而不是一个按钮,因为我在prepareForSegue
中发送的GFHomeCell
属性只存在于- (void)commentButtonClick:(id)sender {
[self performSegueWithIdentifier:@"addCommentSegue" sender:sender];
}
:
prepareForSegue
最后我的} 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 {}
(我只包括与此segue相关的部分):
{{1}}
我是iOS新手,这让我很难过,所以任何帮助都会非常感激,谢谢。
答案 0 :(得分:4)
这种情况基本上有两种常见的方法。一种是通过按钮的超级搜索进行搜索,直到找到单元格。您不应该依赖于上升一个或两个级别,因为层次结构在过去已经发生了变化,并且可能会再次发生变化(您需要在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来获取包含tapped按钮的单元格的indexPath
答案 1 :(得分:1)
嗯,一个答案就是在视图层次结构中上升一级:
- (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];