我有一个带有两个视图的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:在接口中声明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没有答案!
关于问题2,使用'enabled'属性:
self.navigationItem.leftBarButtonItem.enabled = NO;
我无法理解你是否有一个navigationController,但在这种情况下要禁用你需要调用的后退按钮:
self.navigationItem.hidesBackButton = YES;