0

我有一个社交应用程序。我在 TableViewCell 中有一个 UIButton。这个按钮叫做commentButton。我想用这个按钮实现的目的是让用户点击它并转到保存该帖子评论的表格视图。问题是-----是我在尝试通过 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;

调用 Segue @Selector

 -(void) commentSegue 
{
   NSLog(@"Button TOUCHED!");
   [self performSegueWithIdentifier:@"showcomments" sender:self];
}

为 Segue 做准备

-(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 都会打印出相同的数据。它无法区分我选择了哪个单元格。

4

1 回答 1

0

您正在发送selfperformSegueWithIdentifier:sender:. 我假设您的意思是将您的按钮作为发件人发送?(您稍后尝试转换senderCommentButtonin 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];

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

于 2015-12-01T22:10:56.053 回答