如何为故事板使用更改initWithNibName?

时间:2013-07-07 18:52:08

标签: ios tableview didselectrowatindexpath

我正在使用ray的以下教程 http://www.raywenderlich.com/913/sqlite-101-for-iphone-developers-making-our-app

除了从didselectrow

填充的详细信息视图外,我还能让一切工作正常

这就是他所拥有的

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.details == nil) {

        self.details = [[[FailedBanksDetailViewController alloc] initWithNibName:@"FailedBanksDetailViewController" bundle:nil] autorelease];        
    }
    FailedBankInfo *info = [_failedBankInfos objectAtIndex:indexPath.row];
    _details.uniqueId = info.uniqueId;
    [self.navigationController pushViewController:_details animated:YES];
    [self performSegueWithIdentifier:@"testID" sender:self.view];
}

然而它不适用于故事板

有人可以帮助我,我到处寻找答案!!!

3 个答案:

答案 0 :(得分:1)

目前您使用的代码为bob NIB和故事板。选择1并坚持下去。如果您使用故事板,只需执行segue然后处理prepareForSegue:sender:以配置目标视图控制器。

答案 1 :(得分:0)

尝试:

self.details = [self.storyboard instantiateViewControllerWithIdentifier:@"FailedBanksDetailViewController"];

FailedBanksDetailViewController是主故事板中视图控制器的identifier

由于您使用的是http://www.raywenderlich.com,因此可以查看故事板示例here

答案 2 :(得分:0)

有两种选择:

  1. 您可以使用“故事板ID”(在Interface Builder中执行此操作)提供要转换到的场景,然后使用instantiateViewControllerWithIdentifier代替initWithNibName

  2. 如果您在故事板中使用单元格原型,则根本不需要didSelectRowAtIndexPath方法,而只需将细胞原型中的segue添加到下一个场景中。然后,您可以编写prepareForSegue方法,将uniqueId传递给下一个场景。

    prepareForSegue看起来像是:

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        if ([segue.identifier isEqualToString:@"DetailsSegue"])
        {
            NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
            FailedBankInfo *info = [_failedBankInfos objectAtIndex:indexPath.row];
            [(FailedBanksDetailViewController *)segue.destinationViewController setUniqueId:info.uniqueId];
        }
    }
    

    显然,将DetailsSegue替换为您为segue的故事板ID提供的任何名称。