我在视图中有一个textfield和textview。我想在textView中编辑文本时在键盘上显示工具栏但我不想在编辑textField时显示工具栏。我正在使用以下代码:
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
[super viewWillAppear:animated];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(keyboardWillShow:)
name: UIKeyboardWillShowNotification object:nil];
[nc addObserver:self selector:@selector(keyboardWillHide:)
name: UIKeyboardWillHideNotification object:nil];
return YES;
}
和
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification
object:nil];
return YES;
}
我的问题是,当用户尝试编辑textfield并直接开始编辑textView时,我们无法显示toolBar呢?如何在键盘上显示这种情况的工具栏?
答案 0 :(得分:1)
正如之前在answer上所解释的那样。 UITextField
和UITextView
为> iOS3.2提供了属性inputAccessoryView
,您可以设置所需的任何视图,它会显示在键盘的顶部。因此,您不需要使用UINotificationCenter
。这是完成你想要的代码。
- (void)viewDidLoad
{
[super viewDidLoad];
UIToolbar *keyboardToolbar =[[UIToolbar alloc] initWithFrame:CGRectMake(0,250,320,30)];
keyboardToolbar.barStyle = UIBarStyleBlackOpaque;
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(dismissKeyboard)];
UIBarButtonItem *flex = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
NSArray *items = [[NSArray alloc] initWithObjects:flex,barButtonItem, nil];
[keyboardToolbar setItems:items];
self.textView.inputAccessoryView =keyboardToolbar;
}
-(void)dismissKeyboard
{
[self.textView resignFirstResponder];
}
您需要为inputAccessoryView
设置UITextView
,因此UITextField
会显示默认键盘。
我希望这会有所帮助。
答案 1 :(得分:0)
您应该使用此委托方法来检索UITextField或UITextView的键盘通知
- (void)keyboardWillShow:(NSNotification *)notification
{
//self.keyboardNotification = notification; //store notification and process on text begin delegate method.
}
答案 2 :(得分:0)
您已经知道应该使用inputAccessoryView,但这就是您的代码不起作用的原因:
UIKeyboardWillShowNotification
将在textFieldShouldBeginEditing:
返回后发布。
这是因为您可以通过从textFieldShouldBeginEditing:
返回NO来取消编辑,在这种情况下,应该没有UIKeyboardWillShowNotification
。
请勿删除textFieldShouldBeginEditing:
中的通知。否则,您在发布时不再观察此通知。
如果您在viewWillAppear:
中添加通知,请在viewWillDisappear:
中删除它们。