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,所以你可以在整个应用程序中使用它。

+2

现在的问题是你如何去导航控制器参考,并不怎么你创造它。 – Wain

当调用viewDidLoad时,视图刚刚被加载,但视图控制器尚未被添加到导航控制器。所以使用viewDidLoad作为你的触发器是没有用的。

更好的方法是在导航控制器创建时显式传递给视图控制器。或者执行didMoveToParentViewController:并在那里进行配置。

您是从控制器,这是不navigationController的一部分推的viewController,所以首先让navigationController的一部分,然后尝试