iPad UISplitViewController 多个根视图
Posted
技术标签:
【中文标题】iPad UISplitViewController 多个根视图【英文标题】:iPad UISplitViewController multiple root views 【发布时间】:2010-09-28 14:02:55 【问题描述】:我正在为 iPad 开发,并使用 Xcode 中提供的模板创建了一个标准 UISplitViewController 应用程序 - 左侧是标准 UITableView,右侧是详细视图。
我已经修改了模板,这样当用户从左侧视图中选择一个表格单元格时,它会在它的位置推送一个新的表格视图(仍然在左侧)。这没有问题,但我希望能够从新的表格视图更新现有的详细视图 - 有点像 Apple 的邮件应用程序的工作方式。
- 我不想在详细视图(右侧)上创建多个视图 - 我已阅读文档并查看 Apple 提供的示例代码。
我阅读/遵循了许多教程,但似乎无法让这个相对简单的视图层次结构发挥作用。
更多细节:-
在 RootView didSelectTableRowAtIndexPath 委托方法中使用 detailViewController.detailItem = @"Test";
会更新 Detail 视图标签。在新推送的表格视图中使用完全相同的代码不会更新标签 - 我是否缺少参考点或其他什么??
自发布以来,我尝试使用协议和委托来更新详细视图上的标签。使用新方法从根视图更改标签时,标签会正确更新,但是,当我将新视图推送到根视图(左侧)时,我无法再更新标签。
【问题讨论】:
【参考方案1】:在创建 RootViewController(或者甚至在自定义 init 方法中)之后的某个时间点,您正在为 DetailViewController 设置委托,这是一个常见的错误,即当您将新的 rootViewController 推送到 NavController 时您忘记设置委托再次。
您可能正在以下位置创建一个新控制器:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
在将新控制器推送到导航控制器之前,方法和记录/增加新控制器的级别。创建此新控制器后,再次设置委托。
newRootController.myDelegate = self.myDelegate;
在你这样做之前如果你在使用它之前对委托进行 NSLog,你可能会发现它的 nil。
【讨论】:
非常感谢,工作的魅力!推送新视图时我已经设置了委托,但我正在创建一个新实例而不是引用现有委托。再次感谢!【参考方案2】:试试你的 UISplitViewController 的 viewControllers 属性
@property(非原子,复制) NSArray
*viewControllers Discussion 该属性中的数组必须包含 两个视图控制器。风景 提出了控制器 在拆分视图中从左到右 横屏时的界面 方向。因此,视图控制器 在索引 0 处显示在左侧 侧面和索引处的视图控制器 1 显示在右侧 界面。
这里的第一个视图控制器 数组通常是隐藏的,当 设备处于纵向。 将委托对象分配给 接收器,如果你想协调 此视图控制器的显示使用 弹出框。
【讨论】:
据我所知,UISplitViewController 的 viewControllers 属性用于将视图控制器分配给视图(!)。我认为我的问题与授权或协议有关。无论我尝试什么,我似乎都无法让它工作......还有其他建议吗?【参考方案3】:请注意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 的属性。
【讨论】:
【参考方案4】:在您推送第二个表(例如 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。
希望对你有帮助。
【讨论】:
以上是关于iPad UISplitViewController 多个根视图的主要内容,如果未能解决你的问题,请参考以下文章
Ipad图标大小Ipad设置ios 5-7 29pt 1x 2x - iPad聚光灯ios 7 40 pt - iPad app ios 7 76 pt [关闭]