簡體   English   中英

“取消”按鈕 (UIBarButtonItem) 在 iOS 視圖 controller 中不起作用

[英]"Cancel" button (UIBarButtonItem) not working in iOS view controller

我正在嘗試以編程方式在我的視圖控制器的導航欄中添加一個“取消”按鈕。 該按鈕的唯一目的是將當前視圖控制器和 go 解散回根視圖控制器。 我正在使用以下 Objective-C 代碼來實現此目的:

UIBarButtonItem* cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(onTapCancel:)];
self.controller.navigationItem.leftBarButtonItem = cancelBtn;
self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.controller];
[self.navigationController setNavigationBarHidden:NO animated:YES];

取消按鈕 function:

-(void)onTapCancel:(UIBarButtonItem*)item{
    NSLog( @"Cancel button Tapped");
    UIViewController *rootViewController = [
      [[UIApplication sharedApplication] keyWindow] rootViewController];
    [rootViewController dismissViewControllerAnimated:YES completion:nil];
}

當我只有一個日志行而不是關閉當前視圖控制器的代碼時,onTapCancel function 被調用而沒有任何問題。 但是當添加關閉視圖控制器的代碼時(onTapCancel 函數中的第 2-4 行),function 停止被調用(我什至沒有在日志中看到“Cancel button Tapped”日志行)。 這可能是什么原因?

以下代碼在 onTapCancel function 中使用時有效(每次點擊取消按鈕時都會打印日志行):

-(void)onTapCancel:(UIBarButtonItem*)item{
    NSLog( @"Cancel button Tapped");
}

謝謝!

仔細查看您的代碼后,我現在可以看到您嘗試關閉應用程序的根 controller。 它本身沒有任何意義,因為根 controller 不可關閉,您只能替換它。 如果您嘗試關閉的 controller 在導航 controller 堆棧中,則彈出到根視圖 controller 應該如下所示:

- (void)onTapCancel:(UIBarButtonItem*)item {
    [self.navigationController popToRootViewControllerAnimated:YES];
}

如果您以模態方式展示 controller(從第一段代碼開始,我假設 controller 也包含導航控制器),然后將其關閉:

- (void)onTapCancel:(UIBarButtonItem*)item {
    [self.navigationController dismissViewControllerAnimated:YES completion:nil];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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