【发布时间】:2026-01-12 20:00:02
【问题描述】:
当用户触摸特定的文本字段或文本视图时,如何将完成按钮添加到 UINavigationbar?
或者更好的方法是检测键盘何时显示,然后显示按钮。
我希望完成按钮可以像在标准 Notes 应用程序中一样关闭键盘。
【问题讨论】:
标签: iphone uikeyboard
当用户触摸特定的文本字段或文本视图时,如何将完成按钮添加到 UINavigationbar?
或者更好的方法是检测键盘何时显示,然后显示按钮。
我希望完成按钮可以像在标准 Notes 应用程序中一样关闭键盘。
【问题讨论】:
标签: iphone uikeyboard
您可以尝试类似的方法:
- (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 中的按钮
记得设置代理!
【讨论】:
您应该采用委托协议,因为我相信您在这方面具有优势。你可以这样做——
- (void)textViewDidBeginEditing:(UITextView *)textView {
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:textView
action:@selector(resignFirstResponder)];
self.navigationItem.rightBarButtonItem = doneButton;
[doneButton release];
}
但是,如果您要观察通知,则无法知道哪个是第一响应者。当然,如果您只需要担心一个对象,这不是什么大问题。
【讨论】: