代码之家  ›  专栏  ›  技术社区  ›  yabada

当点击backbarbuttoniem时,是否有方法阻止uiviewController从uinavigationController的堆栈弹出?

  •  5
  • yabada  · 技术社区  · 16 年前

    我有一个带有根视图控制器的uinavigationcontroller,然后我将uiviewcontroller推到导航控制器的堆栈上。当用户点击backbarbuttonitem时,如果满足某些条件,我希望能够弹出一个警报视图,并取消视图控制器的弹出。例如,用户可以进行某些选择,但它们的某些组合可能无效,因此我想通知他们进行更改。

    我知道我可以 防止 当选择无效组合时,用户将生成无效组合或弹出警报视图,但我不希望这样做。用户可能正在更改选择,可能意识到某个组合无效,但我宁愿让他们选择使该组合无效的内容,然后再更改其他内容(如果他们在尝试转到上一屏幕之前没有进行更改,请通知他们)。例如,如果我阻止他们选择无效组合的内容,那么他们可能需要在屏幕上向上滚动,更改内容,然后向下滚动,而不是进行选择,然后向上滚动并更改内容。

    使用 viewWillDisappear: 不起作用,因为尽管我可以生成一个警报视图,但我无法找到防止弹出发生的方法。显示警报视图,但视图控制器仍会弹出,并返回到根视图控制器(显示警报视图)。

    有没有办法防止流行音乐的发生?如果没有,这是否值得提交一份关于错误的报告,或者这是不必要的和/或深奥的?

    3 回复  |  直到 15 年前
        1
  •  1
  •   bpapa    16 年前

    这听起来比导航堆栈上的视图控制器更适合模态视图控制器。

    不过,如果你结婚了,能和他一起干就好了。 UINavigationControllerDelegate 但是你不能。

    是否可以将“后退”按钮设置为“禁用”,直到条目有效?也许当用户试图输入一些东西,但它是无效的,在视图的顶部附近,你有一个标签动画到位,红色文本告诉用户他们需要修复它。同时,“后退”按钮被禁用,并在它们进行更正后启用。

    或者对用户界面控件的工作方式进行真正的创新,以确保用户永远不会输入错误数据。

        2
  •  7
  •   jvcleave    15 年前

    您可以用自己的按钮替换“后退”按钮,该按钮在LoadView中调用所需的方法。

    cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" 
                                        style:UIBarButtonItemStyleBordered 
                                        target:self
                                        action:@selector(onCancelButtonSelected:)];
    
    
    
    self.navigationItem.leftBarButtonItem = cancelButton;
    

    后来

    -(void)onCancelButtonSelected:(id)sender {
    
    if (!hasSavedProduct) 
    {
        cancelAlert = [[UIAlertView alloc] initWithTitle:@"Product not saved" 
                                                 message:@"Exit without saving?" 
                                                delegate:self 
                                       cancelButtonTitle:@"Exit" 
                                       otherButtonTitles:@"Save", 
                                                            nil];
        [cancelAlert show];
        [cancelAlert release];
    }
    

    那就让他们走吧

    - (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    
    
    
    if ([cancelAlert isEqual:actionSheet]) 
    {
        if (buttonIndex == 0)
        {
            NSLog(@"Fine. Exiting without saving");
    
    
            [self.navigationController popViewControllerAnimated:YES];
        }
        else
        {
            NSLog(@"Save here"); 
    
        }
    }
    
        3
  •  1
  •   Jamie Pinkham    16 年前

    让他们回去,只是不要保存任何东西,除非它是完全有效的。这通常是苹果采取的方法。