代码之家  ›  专栏  ›  技术社区  ›  user4992124

访问iPhone上UISplitViewController的详细信息视图

  •  0
  • user4992124  · 技术社区  · 7 年前

    UISplitViewController . 我写了下面的代码在细节视图中显示一个餐厅。

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

    UINavigationController *nvc = [[self.splitViewController viewControllers] objectAtIndex:1]; 但是,因为细节视图还没有被渲染。我怎么解决这个问题?

    1 回复  |  直到 7 年前
        1
  •  0
  •   André Slotta    7 年前

    对于Swift的解决方案很抱歉,但是我很确定您可以根据您的Objective-C环境调整代码。:)

    rtc 不是 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];
        }
    }