Извините за решение Swift, но я уверен, что вы можете адаптировать код к вашей среде Objective-C.:)
Просто добавьте проверку, чтобы убедиться, что ваш rtc
не nil
.Если это nil
, создайте новый экземпляр и вызовите метод UISplitViewController
s showDetailViewController:sender:
:
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)
}
}
ОБНОВЛЕНИЕ - Решение Objective-C может выглядеть примерно так:
- (void)tableView:(UITableView *)tableView didSelectRestaurant:(Restaurant *)restaurant {
if (self.splitViewController.viewControllers.count > 1) {
UINavigationController *nvc = [self.splitViewController.viewControllers objectAtIndex:1];
RestaurantsTabViewController *rtc = [nvc.viewControllers objectAtIndex:0];
[rtc addTabWithRestaurant:restaurant];
} else {
RestaurantsTabViewController *rtc = [RestaurantsTabViewController new];
[rtc addTabWithRestaurant:restaurant];
[self.splitViewController showDetailViewController:rtc sender:self];
}
}