【问题标题】:Problems accessing rootviewController of navcontroller iphone访问 navcontroller iphone 的 rootviewController 的问题
【发布时间】:2010-02-02 16:00:59
【问题描述】:

我正在处理地震 xml iphone 示例。 在该示例中,只有应用程序委托具有 UITableViewController 类型的 rootViewController。

我想稍微修改一下,这样我就有一个 navigationController 并使用它的 rootViewController 作为表视图。我的导航控制器的根视图控制器类被命名为“firstLevelViewController”

在示例代码中它说

 [rootViewController.tableView reloadData];

我想说[navController.firstLevelViewController.tableView reloadData]

但我收到错误提示“在某事中请求成员 firstLevelViewController 不是结构或联合”

如何从主应用委托中引用导航控制器的 rootViewController?

【问题讨论】:

    标签: iphone xcode uinavigationcontroller uitableview


    【解决方案1】:

    UINavigationController 中没有 firstLevelViewController 属性。如果你想访问当前控制器,你可以使用

    UITableViewController* firstLevelViewController = navController.topViewController;
    assert([firstLevelViewController isKindOfClass:[UITableViewController class]]);
    [firstLevelViewController.tableView reloadData];
    

    如果firstLevelViewController表示底部的视图控制器可以使用

    UITableViewController* firstLevelViewController = [navController.viewControllers objectAtIndex:0];
    ....
    

    【讨论】:

    • 啊!非常感谢。我所说的“firstLevelViewController”是导航控件显示的默认第一个根屏幕。我在一本书中读到,这总是存在的。如果我总是想引用我正在使用的 firstLevelViewController,我会使用 objectAtIndex:0 方法吗?
    • @dubbeat:是的。但将值存储在 App 委托的某些属性或静态全局变量中可能更有效。
    【解决方案2】:

    像这样访问 rootViewController:

    Objective-C

    YourViewController *rootController =(YourViewController*)[[(YourAppDelegate*)
                                   [[UIApplication sharedApplication]delegate] window] rootViewController];
    

    斯威夫特

    let appDelegate  = UIApplication.sharedApplication().delegate as AppDelegate
    let viewController = appDelegate.window!.rootViewController as YourViewController
    

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多