将IndexPath.row中的PFObject传递给TableViewCell Parse中的UIButton

时间:2015-12-01 21:48:35

标签: objective-c uitableview parse-platform segue pfquerytableviewcontrolle

我有一个社交应用。我在TableViewCell中有一个UIButton。此按钮称为commentButton。我想用这个按钮实现的目的是让用户点击它并转到一个tableview,其中保存了该帖子的评论。问题是-----我正在努力通过segue传递当前indexPath.row中的PFObjects。我尝试了很多东西。但是,让我帮助您更好地了解我的问题。

What My Cell Looks Like

正如您在上面所看到的,这是我试图启动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会打印出相同的数据,无论我选择哪个单元格。它无法区分我选择的哪个细胞。

1 个答案:

答案 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];

此外,当您使用它时,如果您还没有,则为所有例外创建一个断点。该断点将告诉您在哪一行得到无法识别的选择器错误。