PushViewController从另一个类的当前导航控制器
问题描述:
我从我的UIViewController创建一个类对象,并尝试从它推动控制器,它不会工作。PushViewController从另一个类的当前导航控制器
我一直在做研究,但没有发现任何想法?
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.newClass = [[MyNewClass alloc] init];
self.newClass.view = self.view;
self.newClass.navigationController = self.navigationController;
[self.newClass connect];
}
...
@end
MyNewClass.h
@interface MyNewClass : NSObject<UINavigationControllerDelegate>
@property(nonatomic, retain) UIView *view;
@property(nonatomic, retain) UINavigationController *navigationController;
-(void) connect;
@end
MyNewClass.m
-(void)connect
{
OtherViewController * otherVC =
[[OtherViewController alloc] init];
self.navigationController pushViewController:otherVC animated:YES];
}
...
答
附加folloeing码成的appdelegate的didFinishLaunchingWithOptions实现方法具d。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self copyDatabaseIfNeeded];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
[self.window makeKeyAndVisible];
return YES;
}
然后删除所有其他的UINavigationController声明和分配。像MyNewClass的NavigationVontroller一样。因为在这里你声明和分配appdelegate中的navigationcontroller,所以你可以在整个应用程序中使用它。
答
当调用viewDidLoad
时,视图刚刚被加载,但视图控制器尚未被添加到导航控制器。所以使用viewDidLoad
作为你的触发器是没有用的。
更好的方法是在导航控制器创建时显式传递给视图控制器。或者执行didMoveToParentViewController:
并在那里进行配置。
答
您是从控制器,这是不navigationController的一部分推的viewController,所以首先让navigationController的一部分,然后尝试
现在的问题是你如何去导航控制器参考,并不怎么你创造它。 – Wain