在我的应用中,我使用的是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];
行崩溃,因为尚未渲染详细视图。我该怎么解决?
答案 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)
}
}