0

我從我的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]; 
} 
... 

回答

0

附加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

0

當調用viewDidLoad時,視圖剛剛被加載,但視圖控制器尚未被添加到導航控制器。所以使用viewDidLoad作爲你的觸發器是沒有用的。

更好的方法是在導航控制器創建時顯式傳遞給視圖控制器。或者執行didMoveToParentViewController:並在那裏進行配置。

0

您是從控制器,這是不navigationController的一部分推的viewController,所以首先讓navigationController的一部分,然後嘗試

相關問題