我有一个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课程?
由于
答案 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];