IBAction无法正常工作

时间:2015-10-10 00:44:31

标签: ios objective-c uitableview

我在故事板中有一个名为nextButton的uibarbuttonitem,它带有一个带有segue的另一个ViewController。但是当我尝试在另一个文件上添加此方法时:

- (IBAction)nextButtonPressed:(id)sender {

    NSLog(@"Hello")
}

输出未显示在控制台上。我得到按钮以显示此消息的唯一方法是当我在故事板中取出segue时。当我这样做时,我添加以下方法,以便在单击按钮时以编程方式完成segue:

- (IBAction)nextButtonPressed:(id)sender {

    NSLog(@"Hello");

    GameDetailsTableViewController *gameDetails = [[GameDetailsTableViewController alloc]init];
    [self.navigationController pushViewController: gameDetails animated:YES];
}

但是当我这样做时,控制台显示错误:

  

'NSInternalInconsistencyException',原因:'UITableView dataSource必须从tableView返回一个单元格:cellForRowAtIndexPath:'

我需要帮助来弄清楚如何确保按钮显示消息并在点击时转到下一个视图控制器。

1 个答案:

答案 0 :(得分:3)

可以将按钮分配给IBAction方法或segue。

如果使用segue,请在控制器中实现-prepareForSegue:sender:,以便在执行segue时运行任何其他代码。 E.g:

- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
{
    if ([[segue identifier] isEqual:@"gameDetailSegue"])
    {
        GameDetailsTableViewController* gameDetails = (id)[segue destinationViewController];
        gameDetails.cheatMode = self.prefs.cheatModeEnabled;
    }
}

如果使用操作方法,则必须手动显示视图控制器。您还必须从故事板中实例化视图控制器:

- (IBAction)nextButtonPressed:(id)sender
{
    GameDetailsTableViewController* gameDetails = 
        [self.storyboard instantiateViewControllerWithIdentifier:@"gameDetailController"]
    gameDetails.cheatMode = self.prefs.cheatModeEnabled;
    [self.navigationController pushViewController:gameDetails animated:YES];
}

在任何一种情况下,您都必须为故事板中的segue和视图控制器分配标识符。