簡體   English   中英

導航控制器pushViewController不起作用

[英]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我正在使用mainViewCtrlsecondViewCtrl

但仍然沒有用:(

您輸入錯誤:

它的

_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM