取消返回按钮单击我的navigationController

时间:2011-03-08 18:23:53

标签: iphone objective-c uinavigationcontroller

我有一个自定义的navigationController:

#import "customNavigationController.h"
#import "StartViewController.h"
#import "EtapeViewController.h"

@implementation customNavigationController

- (UIViewController *)popViewControllerAnimated:(BOOL)animated
{
    // Accueil du guide, on cache le navigationBar
    if([self.viewControllers count] == 2){
        self.navigationBarHidden = TRUE;
        return [super popViewControllerAnimated:animated];
    }
    // Si on est pas à l'accueil, on fait l'action normal sur le backBarButton
    else {
        // Si on est dans une étape, le backButton va servir à reculer dans les étapes, et non reculer vers le workflow
        NSString *className = NSStringFromClass([[self.viewControllers objectAtIndex:[self.viewControllers count] - 1] class]);
        if ([className isEqualToString:@"EtapeViewController"]) {
            EtapeViewController *etape = [self.viewControllers objectAtIndex:[self.viewControllers count] - 1];
            if (etape.show_previous_button) {
                [etape previousEtape:nil];
                return FALSE;
            }
            return [super popViewControllerAnimated:animated];
        }
        else {
            return [super popViewControllerAnimated:animated];
        }
    }
}
@end

在某些情况下,我想取消backButton的click事件(在显示为“return FALSE”的行上),但它不起作用。

有办法吗?

3 个答案:

答案 0 :(得分:1)

代替return FALSE,你可以这样做:

return nil;

return [self topViewController];

要么有正确的副作用。

话虽如此,请注意您的UI设计。确保用户知道后退按钮无法以某种方式工作的原因。

答案 1 :(得分:0)

我不明白为什么你会让Back按钮忽略水龙头?这似乎会让用户感到困惑,App Store团队会认为这是一个错误。也许你可以发布截图吗?

重新设计界面可能会更好,并考虑1)使用工具栏按钮进行导航(如Mobile Safari)或2)完全支持基于UINavigation的视图而不是解决它。


更新:听起来你要执行不同的操作,比如显示确认信息?我不知道任何官方方法可以做你想要的事情,因为UINavigationControllerDelegate方法只是通知你转换,它们不允许你取消/修改它们。 (如果转换是动画的,那么使用导航控制器的视图堆栈可能无济于事。)

所以你总是可以在后面的按钮上漂浮一个透明(或几乎透明)的窗口,然后拦截这种方式。这是一些与状态栏类似的示例栏:

https://github.com/myell0w/MTStatusBarOverlay

答案 2 :(得分:0)

为什么不在不希望用户点击它的情况下禁用后退按钮?