我刚刚开始使用分割视图来创建iPad应用程序。当我仅使用标准的MasterDetail应用程序模板(Xcode 4.2)创建项目时,它会创建一个MasterViewController和一个DetailViewController。模板有以下方法,当从弹出的表格(主细节视图控制器)选择行时会调用该方法:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
if (!self.detailViewController)
{
self.detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
}
[self.navigationController pushViewController:self.detailViewController animated:YES];
现在我理解了,当你使用常规的导航控制器时,如果你正在为iPhone编程,只需像这样将另一个视图控制器推到栈上即可。然而,对于该模板,它只是将详细视图推到弹出窗口中,而不是更新已经存在的内容。我不明白需要更新什么来从弹出窗口(主详细视图)中选择某些内容,然后使detailView更新。
更新:
为了尝试和测试已经在DetailViewController中设置的“detailItem”,我注释了pushViewController并添加了以下内容:
//[self.navigationController pushViewController:self.detailViewController animated:YES];
self.detailViewController.detailItem = @"Test";
// setter in detailViewController
- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
_detailItem = newDetailItem;
// Update the view.
[self configureView];
}
if (self.masterPopoverController != nil) {
[self.masterPopoverController dismissPopoverAnimated:YES];
}
}
- (void)configureView
{
// Update the user interface for the detail item.
// detailDescriptionLabel.text is a IBOutlet to the label on the detailView
if (self.detailItem) {
self.detailDescriptionLabel.text = [self.detailItem description];
}
}
根据这段代码,detailViewController上标签的文本应该被更新。 但是,当我在主视图控制器表格中点击项目时,什么也没有发生。
UIPopOver
导航栈中。你的解决方案不错,通过在根(主?)视图中引用 detailView,代码稍微更清晰了一些,但思路是相同的。如果这对你有效,请继续使用它。 - Kevin[didSelect:]
操作之前没有设置任何值。我只需确保它是公共的,然后将其设置为AppDelegate中的detailView即可。masterViewController.detailViewController = detailViewController
- Kevin