objective-c - 从 uisplitview 更改主视图和详细 View

标签 objective-c ios xcode ipad uisplitviewcontroller

在我的 Storyboard上,我的项目从一个 Split View开始,该 View 自动将我的自定义 UITableViewController(嵌入在导航 Controller 中)分配为详细 View Controller (通过关系 segue 完成)。如何从我的自定义 UITableViewController 访问 Split View控件,以便我可以适本地更改主视图 Controller View ?

最佳答案

UIViewController 有一个属性 splitViewController,它是对 viewController 嵌入其中的 Split View Controller 的引用。由于您的 TableView Controller 嵌入在导航 Controller 中,导航 Controller 本身嵌入在 Split View Controller 中,因此您首先需要获取对导航 Controller 的引用,然后从中获取其对 Split View的引用。

因此,在您的自定义 tableViewController 代码中,您可以这样做:

UISplitViewController *splitVC = [[self navigationController] splitViewController];

您可以从中获得对 masterViewController 的引用。 splitViewController 有一个属性 viewControllers,它是两个元素的 NSArray。索引为零的元素是主视图 Controller 。索引 1 处的元素是您的详细信息 View Controller 。

UIViewController *masterVC = [[splitVC viewControllers] objectAtIndex:0];

请注意,如果您的 master 是一个自定义的 viewController 子类(它可能是),您应该在将其从数组中拉出时将其强制转换。

如果您想用新的 View Controller 完全替换主视图 Controller ,您可以通过使用新的主 VC 和现有的详细 View Controller 创建一个新数组并将其分配给 Split View Controller 的 viewControllers 来实现 属性:

UIViewController *detailVC = [[splitVC viewControllers] objectAtIndex:1];
NSArray *newViewControllerArray = [NSArray arrayWithObjects:newMasterVC, detailVC, nil];
splitVC.viewControllers = newViewControllerArray;

关于objective-c - 从 uisplitview 更改主视图和详细 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12074554/

相关文章:

ios - 一个 AVPlayerItem 无法与多个 AVPlayer 实例关联,播放多个视频时出错

xcode - 是否推荐使用具有 Cocoa 应用程序模板结构的默认 Xcode 4.6.3 新项目?

ios - 运行 NSTimer 但不更新 UILabel 的 UIBackgroundTaskIdentifier - iOS

objective-c - 无法在屏幕上获取 AVPlayerLayer 中的视频大小

javascript - 我如何才能通过执行负载中包含的操作来对 APNS 推送消息采取行动

ios - 在 GameScene 中定位 SKSpriteNode

iphone - NSData 到 NSString 的转换问题!

objective-c - 我如何扩展 NSArray?

php - 将此 .php 转换为 ObjC 可运行的 NSURLSession POST 请求?

android - 通过 Facebook API 将消息发布到别人的墙( friend 的墙)?