objective-c – 如何使用MasterDetail应用程序模板更新DetailView

前端之家收集整理的这篇文章主要介绍了objective-c – 如何使用MasterDetail应用程序模板更新DetailView前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚开始使用拆分视图来创建iPad应用程序.当我首先使用标准的MasterDetail应用程序模板( Xcode 4.2)创建项目时,它将创建一个MasterViewController和一个DetailViewController.模板具有以下方法,当从popover表(主详细信息视图控制器)中选择一行时,该方法调用
- (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,你只是做这种类型的事情推动另一个视图控制器到堆栈.然而,使用这个模板,它只是将细节视图推送到popover,而不是更新已经存在的内容.我很困惑,因为我需要更新以从弹出窗口中选择某些东西(主要细节视图),然后进行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上的标签文本应该被更新.但是,当我单击主视图控制器表中的项目时,没有任何反应.

解决方法

有几种不同的方式可以做到这一点.首先,像你说的一样,删除pushViewController调用(我不知道为什么苹果的模板这样做…也许只是为了告诉你可以吗?

接下来,让您的MasterViewController知道已经显示的DetailViewController.我通常在appDelegate中设置master.detailViewController = detailViewController.

记住,DetailViewController已经被显示,所以你不会总是需要重新配置它(除非你用其他视图替换它)

第一选择

使用委托调用设置信息.声明一个协议,将信息传递给detailView并使其适当显示. Here是一个更详细的描述这个的教程.

第二选择

通过DetailViewController传递一些数据&覆盖setter来刷新detailView. Here是一个更详细的教程.

// 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]];
        }
    }

编辑:再次查看模板,并且setDetailItem类型代码已经在那里,但是代码正在创建一个全新的detailView,所以在splitViewController上可以查看的detailView根本不会更改.

原文链接:https://www.f2er.com/c/115135.html

猜你在找的C&C++相关文章