5St*_*yan 11 xcode objective-c uisplitviewcontroller ios xcode-template
我是使用拆分视图创建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];
Run Code Online (Sandbox Code Playgroud)
现在我明白当你使用常规导航控制器时,如果你正在为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];
}
}
Run Code Online (Sandbox Code Playgroud)
根据此代码,应更新detailViewController上标签的文本.但是,当我单击主视图控制器表中的项目时,没有任何反应.
有几种不同的方法可以做到这一点.首先,就像你说的,删除pushViewController电话(我不知道为什么Apple的模板会这样做......也许只是为了告诉你可以吗?).
接下来,让您的MasterViewController了解已经显示的DetailViewController.我通常会master.detailViewController = detailViewController在appDelegate.
请记住,DetailViewController已经显示,因此您不必总是重新分配它(除非您将其替换为其他视图)
第一选择
使用委托调用来设置信息.声明一个协议,将信息传递给detailView并让它适当地显示它.这是一个更详细地描述这个的教程.
第二选择
传递DetailViewController一些数据并覆盖setter以刷新detailView.这是一个更详细地描述这个的教程.
// in DetailViewController
- (void)setDetailItem:(id)newDetailItem {
if (detailItem != newDetailItem) {
[detailItem release];
detailItem = [newDetailItem retain];
// Update the view.
navigationBar.topItem.title = detailItem;
NSString * imageName = [NSString stringWithFormat:@"%@.png",detailItem];
[self.fruitImageView setImage:[UIImage imageNamed:imageName]];
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:再次查看模板,setDetailItem类型代码已经在那里,但代码创建了一个全新的detailView,因此在splitViewController上可见的detailView根本没有改变.
| 归档时间: |
|
| 查看次数: |
13839 次 |
| 最近记录: |