我正在将我的应用程序转换为iOS 8,我决定使用SplitViewController,因为它的新功能最终允许我做我想要的。我在iPad上以模态方式呈现SVC,而SVC是全屏幕垂直过渡的根视图控制器。从呈现视图控制器:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
plotSplitViewController = segue.destinationViewController;
plotViewController = (PlotViewController *)[[[segue.destinationViewController viewControllers] objectAtIndex:1] topViewController];
plotViewController.inventory = _inventory;
if ([plotViewController view]) [plotViewController setPlot:selectedPlot];
}
然后我手动在PlotSplitViewController中建立连接:
- (void)viewDidLoad
{
[super viewDidLoad];
self.delegate = self;
// set up controllers
layoutNavigationController = [self.viewControllers objectAtIndex:1];
plotViewController = (PlotViewController *)[layoutNavigationController topViewController];
plotViewController.delegate = self;
// configure split view
[self showInfoPane:NO withTable:infoTableViewController];
self.preferredDisplayMode = UISplitViewControllerDisplayModePrimaryHidden;
}
因此,master和detail都会获取UINavigationControllers中的视图控制器(利用免费工具栏调整大小,再加上master推送表视图层次结构)。
一切似乎都很好;视图加载它们应该加载,PlotViewController的委托方法正常运行,等等。但正如你所看到的,我将拆分视图控制器指定为它自己的委托...但它不会响应它的任何一个自己的方法,所以我不能自定义它的行为。我检查确保它设置正确:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"split view %@ did appear, delegate: %@", self, self.delegate);
}
它为两个值返回相同的对象(本身)。这只是一个禁忌吗?我读到你可以将SplitViewController指定为自己的委托,我认为一个对象可以是多个其他对象的委托,对吧?它当然可以实现多个协议。那么为什么我的SplitViewController无法为自己接收委托方法呢?我在所有这些中都有NSLog,并且没有一个被称为。
答案 0 :(得分:0)
如果您将自定义视图控制器设置为UIViewController的子类,并以编程方式添加UISplitViewController作为子视图控制器,则可以使用它。让你的VC成为委托,你可以让它按照你的意愿行事。