Доступ к подробному представлению UISplitViewController на iPhone - PullRequest
0 голосов
/ 25 июня 2018

В моем приложении я использую 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 голосов
/ 25 июня 2018

Извините за решение 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];
    }
}
...