1

我有一个 UIViewController 子类(比如 BBB),它继承自已经编写的自定义 UIViewController 类(比如 AAA)。BBB 类中有一个 UITableView,当用户点击 UITableView 的任何单元格时,我想推送另一个 UIViewController 类(比如 CCC)。

所以,我尝试用 BBB 的tableView: didSelectRowAtIndexPath: 方法推动 CCC 控制器。

我的代码是,

CCC *ccc = [[CCC alloc] init];
[self.navigationController pushViewController:ccc animated:YES];
[ccc release];

点击单元格时没有任何反应,因此我通过以下代码检查了 BBB 类的导航控制器。

if (self.navigationController == nil)
{
    NSLog(@"Navigation controller is nil");
}

该消息已成功打印:) 所以,我试图为导航控制器分配一些东西,但我的运气不好,它是一个只读属性。

然后我尝试通过将 ccc 分配为 rootviewcontroller 来创建本地 UINavigationController,然后尝试推送该本地导航控制器。它抛出一个异常“不支持多次推送同一个视图控制器实例”。

我的问题是,

  • 是否可以找到导航控制器在 AAA 类中获得 nil 值的位置?我没有在我的 BBB 类中将导航控制器设为 nil,并且我发现在 AAA 类中是否有任何类似“self.navigationController = nil”的语句。但没有什么是那样的。

  • 如何推送 CCC 类?

谢谢

4

2 回答 2

1

将它放入您的应用程序委托中,您的代码的第一个版本应该可以工作。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window makeKeyAndVisible];
    AAA *aaa = [[AAA alloc] init];
    self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController: aaa];
    [self.window makeKeyAndVisible];

    return YES;
}
于 2012-12-12T19:17:23.477 回答
0

self.navigationController正确设置属性,您必须创建一个UINavigationControllerwith [[UINavigationController alloc] initWithRootViewController: aaa]。然后,无论您当前添加 aaa (splitViewController 或 UIWindow 等),请改用您创建的导航控制器。

例如,如果您使用代码设置视图,请在您的应用委托中:

AAA *aaa = [[AAA alloc] init];
UINavigationController *root = [[UINavigationController alloc] initWithRootViewController: aaa];
UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[window makeKeyAndVisible];
window.rootViewController = root;

现在,aaa.navigationController将指向root,因此您可以执行原始帖子中的操作:[self.navigationController pushViewController: bbb animated: YES];

于 2012-12-12T18:56:58.420 回答