0

ここで説明したのと同じ問題がありました。inputAccessoryViewにテキストフィールドを追加し、textViewをファーストレスポンダーにする方法と、Tomによって投稿されたソリューションがうまく機能します。今、私の新しい問題は、同じinputAccessoryViewがUITextFieldとUITextViewによって使用されており、どちらが呼び出し元であるかを区別する方法をまだ見つけていないことです。

ここに小さなコードがあります:

@property (unsafe_unretained, nonatomic) IBOutlet UITextField *titleField;
@property (unsafe_unretained, nonatomic) IBOutlet UITextView *reviewField;

viewDidLoadで:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.titleField.inputAccessoryView = self.accessorView;
    self.reviewField.inputAccessoryView = self.accessorView;
    self.accessorView.delegate = self;

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(changeFirstResponder:)
                                                 name:UIKeyboardDidShowNotification
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(fillAccessorView:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
}

と2つのハンドラー

- (void) fillAccessorView:(NSNotification *) notification
{
    self.accessorView.titleLabel.text = @"MY Title";
}

- (void) changeFirstResponder:(NSNotification *) notification
{
    [self.accessorView.textInputField becomeFirstResponder];

}

私はすでにこのように試しました

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(changeFirstResponder:)
                                             name:UIKeyboardDidShowNotification
                                           object:self.titleField];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(fillAccessorView:)
                                             name:UIKeyboardWillShowNotification
                                           object:self.titleField];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(changeFirstResponder:)
                                             name:UIKeyboardDidShowNotification
                                           object:self.reviewField];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(fillAccessorView:)
                                             name:UIKeyboardWillShowNotification
                                           object:self.reviewField];

このように、ハンドラーは呼び出されませんでした:/

誰かがどのように行うかについての考えを持っていますか?

4

1 に答える 1

0

残念ながら、これらの通知には nil オブジェクト パラメータがあるため、オブジェクト引数を使用しようとしてもうまくいきませんでした。これらの通知を使用する代わりに、テキスト フィールドとテキスト ビューのデリゲート メソッド (textFieldShouldBeginEditing または textFieldDidBeginEditing、およびそれらに相当するテキスト ビュー) を使用できます。これらのデリゲート メソッドは両方とも、キーボード通知が受信される前に呼び出されます。クラスをテキスト フィールドとテキスト ビューの両方のデリゲートにすることを忘れないでください。

于 2013-01-09T17:50:46.897 に答える