0

我在视图中有一个文本字段和文本视图。我想在 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;
}

我的问题是当用户尝试编辑文本字段并直接开始编辑 textView 时,我们无法为其显示工具栏?在这种情况下,如何在键盘上显示工具栏?

4

3 回答 3

1

正如之前在这个答案中解释的那样。UITextField并且UITextView有一个inputAccessoryView>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];
}

您需要做的就是inputAccessoryView为您的 设置UITextView,因此 UITextField默认键盘将出现。

我希望这将有所帮助。

于 2013-04-15T09:54:11.693 回答
0

您应该使用此委托方法来检索 UITextField 或 UITextView 的键盘通知

- (void)keyboardWillShow:(NSNotification *)notification
{
    //self.keyboardNotification = notification; //store notification and process on text begin delegate method. 
}
于 2013-04-15T09:23:44.763 回答
0

您已经知道应该使用 inputAccessoryView,但这就是您的代码不起作用的原因:

UIKeyboardWillShowNotification将在textFieldShouldBeginEditing:返回后发布。

这是因为您可以通过从 中返回 NO 来取消编辑textFieldShouldBeginEditing:,在这种情况下应该没有UIKeyboardWillShowNotification

不要删除 中的通知textFieldShouldBeginEditing:。否则,您在发布此通知时将不再观察它。

如果您在 中添加通知,请在viewWillAppear:中删除它们viewWillDisappear:

于 2013-04-15T10:23:32.533 回答