按下导航控制器左栏按钮时如何停止视图消失

Posted

技术标签:

【中文标题】按下导航控制器左栏按钮时如何停止视图消失【英文标题】:how to stop view disappearing when navigation controller left bar button pressed 【发布时间】:2015-07-18 06:45:12 【问题描述】:

我是 ios 新手。在我的子视图控制器中,我对数据进行了一些修改。我插入了一个完成按钮来存储数据并从导航控制器堆栈中弹出视图控制器。如果我按下导航控制器后退按钮,它会自动返回而不保存数据。如果我对数据进行了任何修改,然后我按下了返回按钮,我需要显示警报,因为“进行了修改肯定要返回”。如果用户在警报视图中按下取消按钮,我需要停止视图消失并仍然站在同一个视图控制器上。如果有人有答案,请帮助我。

【问题讨论】:

看起来您应该以模态方式呈现视图。这样就没有导航栏或后退按钮。提议的解决方案效果很好,但我认为从概念上讲视图应该是模态的。 【参考方案1】:

我认为这是一种方法

    - (void)viewDidLoad
        [super viewDidLoad];
        [self.navigationItem setLeftBarButtonItem:nil];
        [self.navigationItem setHidesBackButton:YES];

    UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];
    [myButton setImage:[UIImage imageNamed:@"back.png"] forState:UIControlStateNormal];
    //back.png = your image name
    [myButton setTitle:@"Back" forState:UIControlStateNormal];
    [myButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [myButton addTarget:self action:@selector(backButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithCustomView:myButton];
    [self.navigationItem setLeftBarButtonItem:customBackButton];

    

    - (void)backButtonTapped:(id)sender
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Message" message:@"modifications are made are sure want to go back" delegate:self cancelButtonTitle:@"Go Back" otherButtonTitles:@"Stay Here", nil];

        [alert show];
    

    - (void)alertView:(UIAlertView *)alertView
    clickedButtonAtIndex:(NSInteger)buttonIndex
        if (buttonIndex == [alertView cancelButtonIndex])
            [self.navigationController popViewControllerAnimated:YES];
        else
            //Stay on the page and do something
        
    

别忘了加<UIAlertViewDelegate>

【讨论】:

只需添加左栏按钮(覆盖)与您的.. 并制作一个选择器并在该选择器中执行警报部分。上面的答案很适合你的要求 这是正确的答案...但是如果我插入了自定义导航返回按钮,它不会显示箭头标记...所以我需要检测返回按钮被触摸然后我需要显示警报视图... @karthikjin 你必须为自己找到一个后退箭头图标,例如在这个link中。从链接下载后退图标并将其重命名为“back.png”并将其添加到您的项目中。然后你可以看到一个后退按钮。现在将你的后退按钮的大小设置为 32x32。 很高兴它帮助了@karthikjin

以上是关于按下导航控制器左栏按钮时如何停止视图消失的主要内容,如果未能解决你的问题,请参考以下文章

导航返回时导航控制器和视图未更新

按下“更多”按钮时,如何在标签栏控制器内设置导航栏颜色和单元格大小?

在点击按钮时按下导航控制器

使用左栏按钮在导航栏上滑动返回手势

如何检测在导航控制器的下一个视图控制器中按下后退按钮

弹出到根视图控制器时导航栏消失