在导航条上添加自定义后退按钮buttonWithTypw:101不起作用

问题描述:

我已经使用了下面提到的代码,用于自定义左侧指向后退按钮,它工作正常.. 但几天之后,它变回了矩形按钮.. 谁能帮我把它恢复到原来的类型.... 谢谢...在导航条上添加自定义后退按钮buttonWithTypw:101不起作用

UIButton *backButton = [UIButton buttonWithType:101]; 
[backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside]; 
[backButton setTitle:@"Back" forState:UIControlStateNormal]; 

UIBarButtonItem* newBackButton = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
graphSecondViewCtrl.navigationItem.leftBarButtonItem = newBackButton; 

按钮类型101未在SDK中定义,并且可能在任何OS升级时停止工作。

我会使用buttonWithType:UIButtonTypeCustom,然后添加一个图像,通过调用自定义按钮对象上的setImage:forState,为您提供所需的外观。

UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[backButton setImage:[UIImage imageNamed:@"backBarButtonNormal.png"] forState:UIControlStateNormal]; 
[backButton setImage:[UIImage imageNamed:@"backBarButtonHighlighted.png"] forState:UIControlStateHighlighted]; 

// Rest of the code is the same. 

真正的问题是为什么你需要重新创建导航控制器自动给你的标准按钮。确保你使用的工具,而不是对他们。

如果您需要跟踪当视图控制器被换进出,您可以将您的视图控制器是导航控制器的这样的委托:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [[self navigationController] setDelegate:self]; 
} 

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { 

    if (viewController != self) 
     NSLog(@"We're going away..."); 
} 

- (void)viewDidUnload { 
    [super viewDidUnload]; 
    [[self navigationController] setDelegate:nil]; 
} 
+0

的事情是,我必须当按下后退按钮时,在我的代码中设置一些标签。如果使用默认的后退按钮,则无法完成此操作。我创建了这个自定义按钮,以便页面可以返回,我可以调用我的函数..是否有任何替代解决方案.. – 2011-06-16 08:47:52

+0

绝对! UINavigationController有一个委托,当显示一个视图控制器时会被通知。视图控制器交换进出时,您可以根据需要实施委托并进行更新。 – 2011-06-16 08:51:40

+0

我发现代表fns willShowViewController和didShowViewController ..但我不知道如何使用它们。你可以帮我吗..在我的导航视图中有3个屏幕。两个后退按钮调用不同的backAction方法.. – 2011-06-16 12:00:11

按钮类型101是无证。这不是苹果公司同意维护的,所以它可以随时改变。依靠这些东西是不正确的。您应该考虑带图片的custom按钮,以确保它不会像现在这样为您打破。