我正在将我的应用程序转换到iOS 8,并且我决定使用SplitViewController,因为它的新功能最终允许我做我想做的事。我在iPad上以模态形式呈现SVC,而SVC是全屏幕垂直转换的根视图控制器。从呈现视图控制器:iOS 8 UISplitViewController委托没有响应
- (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;
}
所以主机和细节进去UINavigationControllers视图控制器(采取免费的工具栏大小调整的优势,再加上主表推视图层次结构)。
一切似乎都很好;视图加载,因为它们应该是,PlotViewController的委托方法正常工作,等等。但正如你所看到的,我将分割视图控制器分配给它自己的委托...但它不会响应它的任何自己的方法,所以我不能自定义它的行为。我检查并确认它已正确设置:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
NSLog(@"split view %@ did appear, delegate: %@", self, self.delegate);
}
并且它为两个值返回相同的对象(本身)。这只是一个禁忌?我读过,你可以指定一个SplitViewController作为它自己的委托,我认为一个对象可以是一个以上的其他对象的委托,对吧?它当然可以实现一个以上的协议。那么为什么我的SplitViewController无法为自己接收委托方法?我在他们所有的NSLogs,并没有任何人被称为。