在UINavigationbar中添加完成按钮

时间:2011-05-25 22:19:24

标签: iphone uikeyboard

当用户触摸特定的文本字段或文本视图时,如何将完成按钮添加到UINavigationbar?

或者更好的方法是检测键盘何时显示,然后显示按钮。

我希望完成按钮可以像标准的Notes应用程序一样关闭键盘。

2 个答案:

答案 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];
}

但是如果您要观察通知,则无法知道哪一个是第一响应者。当然,如果只有一个对象需要担心,那就不是问题了。