-1

キーボード上部のボタンで構成されるカスタム ビューを追加しました。ボタンは正しく表示されていますが、ボタンをタップすると、ボタン アクションではなく、キーボードの下にあるキーが押されます。

UIWindow* tempWindow = [UIApplication sharedApplication].windows.lastObject;
for (UIView *keyboard in [tempWindow subviews]) {
    if ([[keyboard description] hasPrefix : @"<UIInputSetContainerView"]) {
    for(int i = 0 ; i < [keyboard.subviews count] ; i++)
       {
        UIView* hostkeyboard = [keyboard.subviews objectAtIndex:i];
        if([[hostkeyboard description] hasPrefix:@"<UIInputSetHost"] == YES){
            [hostkeyboard addSubview:extraRow];
            [hostkeyboard bringSubviewToFront:extraRow];
           }
       }
    }
}

extraRow は、ボタンで構成される UIView です。

足りないものはありますか?

4

2 に答える 2

0

カスタム ビューを inputAccessoryView としてキーボードに追加するだけです。次に、クリックしたときに発射する正しいターゲットをボタンに割り当てるだけです

- (void)textFieldDidBeginEditing:(UITextField *)textField {

    UIView  * theView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 200)];
    [theView setBackgroundColor: [UIColor greyColor]];

    UITextField * txtTest = [[UITextField alloc] initWithFrame:CGRectMake(0, 5, theView.frame.size.width, 60)];
    UIButton * btn = [[UIButton alloc] initWithFrame:CGRectMake(20, 65, 100, 30)];

    [btn setTitle:@"Click my Button" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(alert:) forControlEvents:UIControlEventTouchUpInside];

    // Just put this to see the items or customize the color
    [txtTest setBackgroundColor:[UIColor whiteColor]];
    [btn setBackgroundColor:[UIColor blueColor]];

    // Need this to add it to the view
    [theView addSubview:txtTest];
    [theView addSubview:btn];

    textField.inputAccessoryView = theView;
}
于 2016-03-22T01:24:49.443 に答える
0

考慮すべきことの 1 つは、extraRow の exclusiveTouch プロパティを YES に設定することです。免責事項として、私はこの例を自分で試したことはありませんが、あなたが抱えている問題は、タッチイベントに沿ってビューが渡されることが原因だと思います.

于 2016-03-22T01:47:33.560 に答える