【问题标题】:self.navigationController is (null) in TableViewController which is on a TabBarControllerself.navigationController 在 TabBarController 上的 TableViewController 中为 (null)
【发布时间】:2015-03-23 08:12:57
【问题描述】:

我正在尝试在 iOS 中创建一个小应用程序。在登录页面之后,我有一个 TabBarController,其中的第一个选项卡是 TableViewController。在 didSelectRowAtIndexPath 中,我试图为每个选定的行推送一个视图控制器。当我使用 NSLog 打印它并且我无法推送 ViewController 时,相同的视图控制器但 self.navigationController 为(null)。救命!!

这是示例代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here, for example:
    // Create the next view controller.
    PlayerDetailsViewController *detailViewController = [[PlayerDetailsViewController alloc] initWithNibName:@"PlayerDetailsViewController" bundle:nil];
    detailViewController.myImg.image=[UIImage imageNamed:[self.arrNames objectAtIndex:indexPath.row]];
    detailViewController.name.text=[self.names objectAtIndex:indexPath.row];
    detailViewController.year.text=[self.draft objectAtIndex:indexPath.row];
    detailViewController.height.text=[self.height objectAtIndex:indexPath.row];
    detailViewController.weight.text=[self.weight objectAtIndex:indexPath.row];
    detailViewController.pro.text=[self.pro objectAtIndex:indexPath.row];
    detailViewController.ppg.text=[self.ppg objectAtIndex:indexPath.row];
    detailViewController.apg.text=[self.apg objectAtIndex:indexPath.row];
    detailViewController.rpg.text=[self.rpg objectAtIndex:indexPath.row];
    NSLog(@"%@",self.navigationController);


    [self.navigationController pushViewController:detailViewController animated:YES];

}

更新:我让导航控制器工作,但现在,推送视图(PlayerDetails)中的数据为空白!!

【问题讨论】:

  • 响应者层次结构中没有UINavigationController。将UITabBarControllerTableViewController 设置为 UINavigationController 的 rootViewController。
  • 请问我该怎么做?

标签: ios objective-c


【解决方案1】:

您没有将 firstViewController 嵌套在 UINavigationController 中是错误的。

所以我猜你的代码在创建 UITabViewController 时会是这样的。

[tabVC setViewControllers:[vc1,vc2,nil]];//tabVC = UITabViewController

它需要像下面这样改变;

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc1];
[tabVC setViewControllers:[nav,vc2,nil]];

【讨论】:

  • 我必须在 tableViewController 的 didSelectRowAtIndexPath 中使用 nan 变量?
  • 不,你要做的是 UITabViewController->UITableViewController->PlayerDetailsViewController 这是错误的。你实际需要做的是 UITabViewController->UINavigationController->UITableViewController->PlayerDetailsViewController
  • 好的。它可以工作,但是现在我发送给 detailViewController 的数据丢失了。我的意思是,当我使用 presentViewController 时,我可以将值设置为 detailViewController,现在,我得到一个空白显示。
  • 这与您当前的问题无关,您更愿意发布另一个问题
【解决方案2】:

假设UITabBarController的实例是tabVCUITableViewController的实例是tableVC

UINavigationController *nav = [[UINavigationController alloc initWithRootViewController:tabVC];

UINavigationController *nav = [[UINavigationController alloc initWithRootViewController:tableVC];
[tabVC setViewControllers:@[nav]];

两者都会解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多