从另一个UIViewController推送UIViewController - 如何?

时间:2012-12-12 18:49:08

标签: ios uiviewcontroller uinavigationcontroller pushviewcontroller navigationcontroller

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

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

我的代码是,

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

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

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

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

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

我的问题是,

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

  • 我如何推动CCC课程?

由于

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

要正确设置self.navigationController属性,您必须使用UINavigationController创建[[UINavigationController alloc] initWithRootViewController: aaa]。然后,无论您何时添加aaa(splitViewController,还是UIWindow等),都可以使用您创建的导航控制器。

例如,如果您使用代码设置视图,请在您的app delegate:

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];

相关问题