iPad UISplitViewController多个根视图

时间:2010-09-28 14:02:55

标签: iphone objective-c ipad

我正在为iPad开发,并使用Xcode中提供的模板创建了一个标准的UISplitViewController应用程序 - 左侧是标准UITableView,右侧是详细视图。

我修改了模板,以便当用户从左侧视图中选择一个表格单元格时,它会在其位置(仍然在左侧)推送一个新的表格视图。这没有问题,但我希望能够从新的表格视图更新现有的详细信息视图 - 有点像Apple的Mail应用程序的工作方式。

- 我不想在详细视图(右侧)上创建多个视图 - 我已经阅读了文档并看到了Apple提供的示例代码。

我阅读/遵循了很多教程,但似乎无法让这个相对简单的视图层次结构起作用。

更多细节: -

在RootView中使用detailViewController.detailItem = @"Test"; didSelectTableRowAtIndexPath委托方法更新详细信息视图标签。在新推送的表视图中使用完全相同的代码不会更新标签 - 我是否缺少参考点或其他内容?

自发布以来,我一直试图使用协议&委托更新详细视图上的标签。使用新方法从根视图更改时,标签会正确更新,但是,当我将新视图推到根视图(左侧)时,我无法再更新标签。

4 个答案:

答案 0 :(得分:1)

尝试使用UISplitViewController的viewControllers属性

  

@property(非原子,复制)NSArray

     

* viewControllers Discussion此属性中的数组必须完全包含   两个视图控制器。风景   提供控制器   在拆分视图中从左到右   在景观中的界面   取向。因此,视图控制器   在索引0处显示在左侧   side和视图控制器在索引处   1显示在右侧   界面。

     

第一个视图控制器   数组通常是隐藏的   设备处于纵向方向。   将委托对象分配给   接收器,如果你想协调   使用此视图控制器的显示   一个popover。

答案 1 :(得分:1)

在创建RootViewController之后的某个时刻(或者甚至在自定义的init方法中)你正在设置DetailViewController的委托,这是一个常见的错误,当一个新的rootViewController被推到NavController上时你忘了设置delgate再次。

您可能正在创建一个新的控制器:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

方法并在将新控制器推送到navController之前记录/递增新控制器的级别。创建此新控制器后,再次设置委托。

newRootController.myDelegate = self.myDelegate;

在您执行此操作之前如果您在使用它之前NSLog代理,您可能会发现它没有。

答案 2 :(得分:0)

请注意detailViewController!您必须将此实例变量传递给新的根视图。所以像这样:

newRootViewController.detailViewController = self.detailViewController

否则,您的新根视图将永远不会知道detailView。对于新的根(表)视图,您必须执行以下操作:

#import <UIKit/UIKit.h>
@class DetailViewController;

    @interface VorhersageTable : UIViewController {
        UITableView *vorhersageTableView;
        DetailViewController *detailViewController;
    }
    @property (nonatomic, retain) IBOutlet UITableView *vorhersageTableView;
    @property (nonatomic, retain) DetailViewController *detailViewController;
    @end

在新类中声明detailViewController的属性。

答案 3 :(得分:0)

在推送第二个表(例如SubRoot)之前在RootViewController.didselectRow中添加它

SubRoot *subController = [[SubRoot alloc] initWithNibName:@"SubRoot" bundle:nil];
subController.detailViewController = self.detailViewController;

创建类似于RootViewController的SubRoot.h和SubRoot.m。

@class DetailViewController;
@interface SubRoot : UITableViewController {
    DetailViewController *detailViewController;
}
@property (nonatomic, retain)  DetailViewController *detailViewController;
@end

然后合成detailViewController。

希望它有所帮助。