当用户触摸特定的文本字段或文本视图时,如何将完成按钮添加到UINavigationbar?
或者更好的方法是检测键盘何时显示,然后显示按钮。
我希望完成按钮可以像标准的Notes应用程序一样关闭键盘。
答案 0 :(得分:6)
你可以尝试类似的东西:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self
action:@selector(doneEditing)];
[[self navigationItem] setRightBarButtonItem:doneButton];
[doneButton release];
}
以及
- (void)textViewDidBeginEditing:(UITextView *)textView
{
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self
action:@selector(doneEditing)];
[[self navigationItem] setRightBarButtonItem:doneButton];
[doneButton release];
}
根据您的喜好自定义
- (void)doneEditing {
[[self view] endEditing:YES];
}
然后移除- (void)textFieldDidEndEditing:(UITextField *)textField
以及- (void)textViewDidEndEditing:(UITextView *)textView
请记住设置代表!
答案 1 :(得分:2)
你应该采用委托协议,因为我相信你在那里有优势。你可以这样做 -
- (void)textViewDidBeginEditing:(UITextView *)textView {
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:textView
action:@selector(resignFirstResponder)];
self.navigationItem.rightBarButtonItem = doneButton;
[doneButton release];
}
但是如果您要观察通知,则无法知道哪一个是第一响应者。当然,如果只有一个对象需要担心,那就不是问题了。