use*_*076 5 iphone storyboard uinavigationcontroller xcode4
我之前在XCode版本中设置了一个导航控制器,但我使用的是最新版本,并尝试使用故事板进行设置.我有Tab Bar Controller,它提供两种形式.第二种形式有一个UITableview,当用户使用导航控制器进行选择时,我想移动到另一种形式.我已经阐述了我的关系如何看待下面.

问题似乎与我的关系建立有关.我控制点击从第二个表单到导航控制器,弹出窗口为我提供了"推送,模态或自定义"选项.我选择了"推送"但是当我尝试运行下面的代码时,ir不起作用.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
NSString *tSel = [listContents objectAtIndex:row];
ConstantRateController *detailController = [[ConstantRateController alloc] initWithNibName:@"ConstantRateController_iPhone" bundle:nil];
[self.navigationController pushViewController:detailController animated:YES]
}
Run Code Online (Sandbox Code Playgroud)
我通过调试器运行代码,它运行没有错误,但下一个表单没有显示.
根据您的描述,听起来有三个问题:
推送segues要求将源视图控制器嵌入到导航控制器中 - 而是让源视图控制器尝试切换到导航控制器.
目标视图控制器也需要位于故事板中.
一旦你使用了故事板,你通常不希望按照模式从故事前的世界推送新的视图控制器(也就是说,创建一个视图控制器并将其推入tableView:didSelectRowAtIndexPath:)...这样做会复制一堆故事板为您做的工作.
代替:
将表视图控制器放入导航控制器,并在选项卡视图控制器中放置导航控制器.(您可以使用编辑器>嵌入菜单执行此操作,或者将它们拖出库并拖动它们之间的"关系"连接.)
通过从库中拖出视图控制器并将其类设置为视图控制器类(ConstantRateController),将目标视图控制器放在故事板中(如果它已经不存在).
将push segue从表视图单元格拖到目标视图控制器:

完成所有三个步骤后,您的故事板应如下所示:

最后,在表视图控制器中,实现以下内容:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// test segue.identifier if needed
MyViewController *viewController = segue.destinationViewController;
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
// set properties of viewController based on selection indexPath
}
Run Code Online (Sandbox Code Playgroud)
segue创建并推送视图控制器; 您需要做的就是配置它以使其内容反映导致segue的表选择.(请注意,如果表视图控制器中有多个segue,则应在IB中为每个segue分配一个唯一标识符并对其进行测试prepareForSegue:sender:以配置相应的目标视图控制器.)
如果您需要根据选择的单元格支持表格视图中的多个segue,则会有所不同.显然,故事板无法知道由委托/ dataSource填充的单元格,因此您无法从单元格设置segue ...至少不能在动态表格中设置.
听起来你可能就像一个设置视图,你有一个静态的单元格集,其中每个单元格应该转到另一个视图(如某些设置页面).在这种情况下,您可能希望查看从故事板获得的另一个功能:静态表.如果在IB中选择表视图(而不是表视图控制器),属性检查器的顶部允许您在动态原型和静态单元之间切换 - 前者是我上面描述的,后者允许您创建单元格并完全在IB中划分和编辑其内容.使用静态单元格,您可以从每个单元格中创建一个不同的区域...因此您可以完全在IB中创建一个类似于多页设置的UI(当然,当切换交换机时,您仍然需要代码来执行某些操作).
如果需要从动态表中支持多个segue ,则需要两件事:
segue的不同来源 - 您不能从单元格中出现多个segue,但是您可以从(table)视图控制器本身出现多个segue.
根据用户的操作选择segue的逻辑.在这里,我们又回到了tableView:didSelectRowAtIndexPath:,但不是创建新的视图控制器,将其推导航控制器或模态呈现它,你只需要调用performSegueWithIdentifier:上self.
在这个答案中有更多细节,更多关于Apple视图控制器指南中的故事板编程实践: