在iPhone上访问UISplitViewController的详细视图

时间:2018-06-24 21:05:44

标签: ios uikit uisplitviewcontroller

在我的应用中,我使用的是UISplitViewController。我编写了以下代码,以在详细视图中显示餐厅。

- (void)tableView:(UITableView *)tableView didSelectRestaurant:(Restaurant *)restaurant {
    UINavigationController *nvc = [[self.splitViewController viewControllers] objectAtIndex:1];
    RestaurantsTabViewController *rtc = [[nvc viewControllers] objectAtIndex:0];
    [rtc addTabWithRestaurant:restaurant];
}

这在iPad上效果很好,因为它同时渲染了主视图和局部视图。在iPhone上,它仍在UINavigationController *nvc = [[self.splitViewController viewControllers] objectAtIndex:1];行崩溃,因为尚未渲染详细视图。我该怎么解决?

1 个答案:

答案 0 :(得分:0)

很抱歉,Swift解决方案很不错,但是我很确定您可以将代码适应您的Objective-C环境。 :)

只需添加一项检查,以确保您的rtc不是nil。如果是nil,请创建一个新实例,然后调用UISplitViewController的{​​{1}}方法:

showDetailViewController:sender:

更新-Objective-C解决方案可能看起来像这样:

func tableView(_ tableView: UITableView, didSelectRestaurant restaurant: Restaurant) {
    if let detailNavigationController = splitViewController?.viewControllers.last as? UINavigationController,
        let rtc = detailNavigationController.viewControllers.first as? RestaurantsTabViewController {
        rtc.addTabWithRestaurant(restaurant)
    } else {
        let rtc = RestaurantsTabViewController()
        rtc.addTabWithRestaurant(restaurant)
        splitViewController?.showDetailViewController(rtc, sender: self)
    }
}