在NavigationBar上添加自定义后退按钮UIButton buttonWithTypw:101无效

时间:2011-06-16 07:54:42

标签: objective-c xcode ipad

我使用了下面提到的代码来定制左后退按钮,它工作正常.. 但过了几天,它变回了一个长方形的按钮.. 任何人都可以帮我把它恢复到原来的类型.... 感谢...

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;

2 个答案:

答案 0 :(得分:0)

按钮类型101未记录。 Apple并未同意维护这一点,因此它可以随时更改。依靠这些东西是不正确的。您应该考虑带有图像的custom按钮,以确保它不会像现在一样破坏。

答案 1 :(得分:0)

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

我使用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];
}