我正在使用 Xcode 附带并在 http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/SecondiOSAppTutorial/ 中引用的 Master-Detail 项目模板
问题:我正在尝试弄清楚如何向此模板附带的默认 UINavigationController
添加额外的 UIViewController
。
具体来说,我想在 DetailViewController
之后添加一个 DetailEditViewController
。到目前为止,这是我为此所做的工作:
在 DetailViewController
中,我向 navigationItem
添加了一个编辑按钮:
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.rightBarButtonItem =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit
target:self
action:@selector(editDetailItem:)];
[self configureView];
}
您可以看到它指定了一个消息选择器 editDetailItem:
,我将其实现为:
- (void)editDetailItem:(id)sender
{
[self.navigationController pushViewController:
[[DetailEditViewController alloc] init] animated:YES];
}
我在 Storyboard 上创建了一个 DetailEditViewController
,代码运行时没有崩溃,生成一个带有导航项的黑色空白窗口,让我回到细节。从这里开始我很困惑:
- 当我将一个新的 View Controller 拖到 Storyboard 中时,没有创建相应的代码文件!我是否负责为这些 Controller 制作代码文件?我看到 Storyboard View Controllers 与 Identity Inspector 中的一个类相关联......但是当我将一个拖到 Storyboard 上时,为什么它不会为新的
UIViewController
创建模板? - 我应该使用 seque 而不是
-pushViewController
来从DetailViewController
到DetailEditViewController
吗?如果是这样,我不确定如何在 Storyboard 上添加一个,因为navigationItem
的UIBarButtonItem
都是在代码中添加的。没有什么可以按住 Ctrl 键拖动。 - 如何将信息从
DetailViewController
发送到DetailEditViewController
?当MasterViewController
转至DetailViewController
时,它通过- prepareForSegue:sender:
指定
sender
最佳答案
没错,没有生成相应的文件。系统应该如何知道你想要什么类(class)?您需要创建一个 UIViewController 子类,并将您拖入的 Controller 的类更改为该类。推送新 Controller 的最简单方法是使用推送 segue——如果你在 Storyboard中没有 UI 元素来连接它,你直接从 Controller 连接它并给 segue 一个标识符(我称之为在我的示例中为“GoToEdit”)。在编辑按钮的操作方法中,然后执行 segue:
[self performSegueWithIdentifier:@"GoToEdit" sender:self];
如果你想传递信息,那么你实现 prepareForSegue:,像这样:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"GoToEdit"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSDate *object = _objects[indexPath.row];
[[segue destinationViewController] setDetailItem:object];
}
}
最好先检查 segue 标识符。然后您可以访问您的 destinationViewController(您可能必须将其转换为您的类,以便编译器识别您尝试设置的任何属性),并将您想要的内容传递给它。
关于ios - 将其他 ViewController 推送到 UINavigationController 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14882057/