在KeyboardDidShow上切换UIBarButtonItem

时间:2014-10-12 17:21:12

标签: ios uinavigationcontroller uibarbuttonitem keyboard-events

目的:我试图切换"保存" UIBarButtonItem与"隐藏键盘"键盘出现时UIBarButtonItem(然后在单击"隐藏键盘"按钮时执行相反操作)。

到目前为止,我已经创建了两个UIBarButtonItem并将它们连接到Interface Builder。

@property (weak, nonatomic) IBOutlet UIBarButtonItem *saveButton;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *hideKeyButton;

Screenshot

这是我到目前为止在我的主要设置的代码:

- (void)keyboardDidShow:(NSNotification *)aNotification {
    // Show HideKey Button
    // Hide Save Button
}

- (void)keyboardWillHide:(NSNotification *)aNotification {
    // Show Save Button
    // Hide HideKey Button
}

在Interface Builder上,默认情况下存在“保存”按钮。以编程方式,如何显示HideKey按钮和隐藏保存按钮?感谢。

2 个答案:

答案 0 :(得分:1)

我没有使用IB执行此任务,而是以编程方式执行此操作。

这样的事情:

UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave
                                                                             target:self
                                                                             action:@selector(saveButtonPressed:)];
[self.navigationItem setRightBarButtonItem:saveButton];

以类似的方式创建并设置HideKey按钮。

然后,当然您可能希望缓存UIBarButtonItem s,为他们设置延迟@properties

答案 1 :(得分:1)

有两个部分可以完成这项工作。

首先,您需要注册通知,您可以在viewDidLoad中添加以下内容:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardDidShow:)
                                             name:UIKeyboardDidShowNotification
                                           object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillHide:)
                                             name:UIKeyboardWillHideNotification
                                           object:nil];

其次,在您的事件处理程序中,只需设置按钮:

- (void)keyboardDidShow:(NSNotification *)aNotification {
    self.navigationItem.rightBarButtonItem = hideKeyButton;
}

- (void)keyboardWillHide:(NSNotification *)aNotification {
    self.navigationItem.rightBarButtonItem = saveButton;
}