如何更改 initWithNibName 以供故事板使用?

Posted

技术标签:

【中文标题】如何更改 initWithNibName 以供故事板使用?【英文标题】:how do I change initWithNibName for storyboard use? 【发布时间】:2013-07-07 18:52:08 【问题描述】:

我正在使用来自 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];

但它不适用于情节提要

谁能帮帮我,我到处找答案!!!

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

尝试:

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

其中FailedBanksDetailViewController 是主情节提要中视图控制器的identifier

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

【讨论】:

【参考方案3】:

几个选项:

    您可以为要过渡到的场景提供“故事板 ID”(您在 Interface Builder 中执行此操作),然后使用 instantiateViewControllerWithIdentifier 而不是 initWithNibName

    如果您在情节提要中使用单元原型,则根本不需要 didSelectRowAtIndexPath 方法,只需将单元原型中的转场添加到下一个场景即可。然后编写一个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 提供的任何名称。

【讨论】:

非常感谢!这开始对我有用,但是当我输入代码时,我得到一个错误 Property 'tableView' not found on object of 'locationViewController *' 有什么想法吗? 当我尝试在视图控制器顶部使用表格视图时会发生这种情况 @Thomasrocks 如果您按照该教程进行操作,FailedBanksListViewController 是一个 UITableViewController 子类,它为它提供了一个 tableView 属性。我不知道这个locationViewController 类是什么。您是否刚刚将 tableview 添加到 UIViewController 子类?如果是这样,表格视图的IBOutlet 是什么?只需将self.tableView 替换为您的tableview 的IBOutlet 我在视图顶部添加了一个表格视图,因为我试图将其作为子视图合并到另一个应用程序中。我不认为我为桌子添加了一个 iboutlet。我想我把自己弄糊涂了。我该怎么做?非常感谢您的回复

以上是关于如何更改 initWithNibName 以供故事板使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改或添加点击功能 js/css 以供移动使用

Swift:更改标签栏的图像色调颜色?

如何在方法中更改detailViewController

如何更改 UITabBarItem 中文本的颜色?

initWithNibName 是如何工作的?

如何更改 Xcode 故事板中的预览设备?