无法调用UIKeyboardNotifications

时间:2013-04-15 09:14:52

标签: iphone ios ios6 uitextfield uitextview

我在视图中有一个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呢?如何在键盘上显示这种情况的工具栏?

3 个答案:

答案 0 :(得分:1)

正如之前在answer上所解释的那样。 UITextFieldUITextView为> 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:中删除它们。