当前位置:  开发笔记 > 编程语言 > 正文

如何更改图像并禁用UIBarButtonItem

如何解决《如何更改图像并禁用UIBarButtonItem》经验,为你挑选了3个好方法。

我有一个带有两个视图的NavigationBar应用程序:父视图和子视图.在子视图中,我在右下角添加了一个按钮,如下所示:

- (void)viewDidLoad {
    UIBarButtonItem *tempButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"lock-unlocked.png"] style:UIBarButtonItemStylePlain target:self action:@selector(lockScreen)];
    self.navigationItem.rightBarButtonItem = tempButton;
    [tempButton release];
}

单击该按钮时,我想更改此rightBarButtonItem的图像并禁用leftBarButtonItem(由控制器自动添加).基本上有两个状态的按钮,锁定和解锁.

问题1:我能找到如何更改图像的唯一方法是使用新图像创建新的UIButtonItem并将rightBarButtonItem替换为新图像.但我想知道是否有办法在不创建新的UIBarButtonItem的情况下更改图像.如果我继续创建新的UIBarButtonItem,我是否会创建内存泄漏?

问题2:如何获取self.navigationItem.leftBarButtonItem并禁用/启用它?我没有手动创建它,它是由控制器自动创建的.我没有在UIBarButtonItem上看到任何方法/属性来启用/禁用用户与它的交互.



1> Gcoop..:

问题1:在接口中声明UIBarButtonItem*tempButton

@interface MyAppDelegate : NSObject  {
    UIBarButtonItem *tempButton;
}

@property (nonatomic, retain) UIBarButtonItem *tempButton;

并在实现中合成它.

@synthesize tempButton;

在viewDidLoad中创建与您现在类似的对象.

- (void)viewDidLoad {
  tempButtom = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"lock-unlocked.png"] style:UIBarButtonItemStylePlain target:self action:@selector(lockScreen)];
  self.navigationItem.rightBarButtonItem = tempButton;
}

但是不要在这里发布它,在通常在底部找到的dealloc方法中释放它.

然后在调用lockScreen时执行

tempButton.image = [UIImage imageNamed:@"myImage.png"]

我害怕,我对问题2没有答案!


第3段代码的一个小问题:你可以在alloc之后释放tempButton,因为当你将它声明为属性时它已经被保留了.

2> 小智..:

关于问题2,使用'enabled'属性:

 self.navigationItem.leftBarButtonItem.enabled = NO;



3> 小智..:

我无法理解你是否有一个navigationController,但在这种情况下要禁用你需要调用的后退按钮:

self.navigationItem.hidesBackButton = YES;

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有