Iphone 无法调用UIKeyboardNotifications
我在视图中有一个textfield和textview。在文本视图中编辑文本时,我想在键盘上显示工具栏,但在编辑文本字段时,我不想显示工具栏。我正在使用以下代码:Iphone 无法调用UIKeyboardNotifications,iphone,ios,ios6,uitextfield,uitextview,Iphone,Ios,Ios6,Uitextfield,Uitextview,我在视图中有一个textfield和textview。在文本视图中编辑文本时,我想在键盘上显示工具栏,但在编辑文本字段时,我不想显示工具栏。我正在使用以下代码: - (BOOL)textViewShouldBeginEditing:(UITextView *)textView { [super viewWillAppear:animated]; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
- (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;
}
及
我的问题是,当用户试图编辑textfield并直接开始编辑textView时,我们无法为它显示工具栏?在这种情况下,如何在键盘上显示工具栏 您应该使用此委托方法检索UITextField或UITextView的键盘通知
- (void)keyboardWillShow:(NSNotification *)notification
{
//self.keyboardNotification = notification; //store notification and process on text begin delegate method.
}
正如前面解释的
UITextField
和UITextView
有一个属性inputAccessoryView
for>iOS3.2,您可以设置所需的任何视图,并显示在键盘顶部。因此,您不需要使用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];
}
您只需为您的UITextView
设置inputAccessoryView
,以便为UITextField
显示默认键盘
我希望这会有所帮助。您已经知道应该使用inputAccessoryView,但以下是代码不起作用的原因:
ui键盘将显示通知
将在textfield shouldBeginediting:
返回后发布
这是因为您可以通过从文本字段shouldBeginediting:
返回NO来取消编辑,在这种情况下,不应该有UIKeyboardWillShowNotification
不要删除文本字段shouldbeginediting:
中的通知。否则,在发布此通知时,您将不再遵守此通知
如果在
视图中添加通知将出现:
,请在视图中删除通知将消失:
顺便说一句,为什么要在文本视图shouldbeginediting
方法中调用视图将出现
方法?是的,我已经实现了这个方法,但当用户直接从文本字段切换到文本视图时,即使是这个委托方法也不会被调用,因为键盘已经显示。您在哪里设置了委托
?请咨询您的xib或self.textView.delegate=self
谢谢各位。。。我忘了添加,但inputAccessoryView帮助解决了我的问题,也帮助我优化了代码。
- (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];
}