[英]navigation controller pushViewController not working
我正在創建一個目前有2個主視圖控制器的應用程序。 該應用程序將加載到初始viewController中,然后單擊其中的一個按鈕將調出第二個viewController。 這是我所擁有的:
AppDelegate.h
#import <UIKit/UIKit.h>
#import "ViewController1.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController1 *mainViewCtr;
@property (strong, nonatomic) UINavigationController *navigationController;
@end
AppDelegate.m
- (void)applicationDidFinishLaunching:(UIApplication *)application {
_mainViewCtr = [[ViewController1 alloc] initWithNibName:@"mainViewCtr" bundle:nil];
_navigationController = [[UINavigationController alloc] initWithRootViewController:_mainViewCtr];
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
_window.rootViewController = _navigationController;
_navigationController.delegate = self;
_navigationController.navigationBarHidden = YES;
[_window addSubview:_navigationController.view];
[self.window makeKeyAndVisible];
}
和我的viewcontroller1
內部的按鈕方法:
- (IBAction)SessionNickNameSubmit:(id)sender {
ViewController2 *secondViewCtrl = [[ViewController2 alloc] initWithNibName:@"secondViewCtrl" bundle:nil];
[self.navigationController pushViewController:secondViewCtrl animated:YES];
}
但是當我單擊按鈕時,視圖不會改變。 我嘗試調試,但代碼未命中,但沒有任何反應。
我在某處缺少設置嗎?
更新
我已經更新了所有viewController變量名稱:
而不是ViewController1/2
我正在使用mainViewCtrl
和secondViewCtrl
但仍然沒有用:(
您輸入錯誤:
它的
_window.rootViewController = _navigationController;
不
_window.rootViewController = _joinViewController;
NeverHopeless的建議也很明顯。 這可能是拼寫錯誤,也是事實,您添加了第二個viewcontroller
作為ViewController2
並且沒有使用正確的變量名。
另一個建議是制作一個情節提要(如果您不使用它),並為過渡添加segue。 只需將按鈕處理分配給按鈕即可。 像這樣:
-(IBAction)SessionNicknameSubmit:(id)sender
{
[self performSegueWithIdentifier:@"identifier" sender:self ];
}
這是一個很好的說明,它如何工作以及如何使用它以及一些有用的指針!
Obj-C是區分大小寫的語言,類名和實例名不應與ViewController2
相同。 嘗試這樣:
- (IBAction)SessionNickNameSubmit:(id)sender {
ViewController2 *viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
[self.navigationController pushViewController:viewController2 animated:YES];
}
原因是您已將窗口的rootViewController設置為ViewController1。
您需要將導航控制器設置為窗口的rootViewController。
因此,當您嘗試按一下按鈕訪問self.navigationController時,它將訪問自身所在的導航控制器,即現在您的窗口的rootViewController。
然后它將正確推送下一個視圖控制器。
在查看了幾乎所有教程和每個堆棧溢出答案之后,我終於找到了一個可行的解決方案。 我必須在應用程序委托中創建情節提要的實例,然后使用該實例創建我的第一個視圖控制器實例。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
self.joinViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController1"];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:joinViewController];
_window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
navigationController.navigationBarHidden = YES;
_window.rootViewController = navigationController;
[_window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
return YES;
}
我認為問題在於,當我創建ViewController
的實例時,它正在創建一個新實例,並將navigation controller
綁定到該實例(獨立於模擬器中顯示的視圖控制器)。 因此,當我使用push方法時,它無法識別self.NavigationController
(這就是NSLog(self.NavigationController == nil)
正在記錄1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.