我有一个社交应用。我在TableViewCell中有一个UIButton。此按钮称为commentButton。我想用这个按钮实现的目的是让用户点击它并转到一个tableview,其中保存了该帖子的评论。问题是-----我正在努力通过segue传递当前indexPath.row中的PFObjects。我尝试了很多东西。但是,让我帮助您更好地了解我的问题。
正如您在上面所看到的,这是我试图启动segue的评论按钮。 commentButton的标签为222.我尝试将按钮的类更改为NSINTEGER:
的cellForRowAtIndexPath
CommentButton *commentButton = (CommentButton*) [cell viewWithTag:222];
commentButton.index = indexPath.row;
[commentButton addTarget:self action:@selector(commentSegue) forControlEvents:UIControlEventTouchUpInside];
commentButton.showsTouchWhenHighlighted = YES;
调用Sese @Selector
-(void) commentSegue
{
NSLog(@"Button TOUCHED!");
[self performSegueWithIdentifier:@"showcomments" sender:self];
}
准备争论
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"showcomments"])
{
CommentsViewController * cvc = segue.destinationViewController;
if([sender isKindOfClass:[CommentButton class]]){
CommentButton * button = sender;
_currentPost =[self.objects objectAtIndex:button.index];
cvc.postObject = _currentPost;
}
}
我尝试过多种方法,当前代码崩溃时发送 无法识别的选择器发送到实例 错误。
我也尝试过:
if([segue.identifier isEqualToString:@"showcomments"]){
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
PFObject *currentObjects = [self.objects objectAtIndex:indexPath.row];
CommentsViewController * cvc = segue.destinationViewController;
NSLog(@"Segue Objects: %@", currentObjects);
cvc.postObject = currentObjects;
}
但是当我的tableView被填充时,我的NSLog会打印出相同的数据,无论我选择哪个单元格。它无法区分我选择的哪个细胞。
答案 0 :(得分:0)
您正在向self
发送performSegueWithIdentifier:sender:
。我假设你的意思是发送你的按钮作为发件人? (您稍后尝试将sender
投射为CommentButton
中的prepareForSegue:sender:
。尝试更改此内容:
-(void) commentSegue
{
NSLog(@"Button TOUCHED!");
[self performSegueWithIdentifier:@"showcomments" sender:self];
}
对此:
-(void) commentSegueWithButton:(CommentButton *)button
{
NSLog(@"Button TOUCHED!");
[self performSegueWithIdentifier:@"showcomments" sender:button];
}
然后您需要修改以下内容:
[commentButton addTarget:self action:@selector(commentSegue) forControlEvents:UIControlEventTouchUpInside];
要成为这样:
[commentButton addTarget:self action:@selector(commentSegueWithButton:) forControlEvents:UIControlEventTouchUpInside];
此外,当您使用它时,如果您还没有,则为所有例外创建一个断点。该断点将告诉您在哪一行得到无法识别的选择器错误。