iOS 8 UISplitViewController委托没有响应

时间:2014-10-07 15:42:30

标签: objective-c ios8 uisplitviewcontroller delegation

我正在将我的应用程序转换为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,并且没有一个被称为。

1 个答案:

答案 0 :(得分:0)

如果您将自定义视图控制器设置为UIViewController的子类,并以编程方式添加UISplitViewController作为子视图控制器,则可以使用它。让你的VC成为委托,你可以让它按照你的意愿行事。