0

ビューに1つのテキストフィールドとテキストビューがあります。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 の編集を開始しようとすると、ツールバーを表示できないことです。このような状況でキーボードにツールバーを表示するにはどうすればよいですか?

4

3 に答える 3

1

この回答で前に説明したように。>iOS3.2用のプロパティがあり、UITextField任意のビューを設定でき、キーボードの上部に表示されます。したがって、使用する必要はありません。これがあなたが望むものを達成するためのコードです。UITextViewinputAccessoryViewUINotificationCenter

- (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 に答える