Определить, какое поле uitextfield называется uikeyboard - PullRequest
2 голосов
/ 21 октября 2011

После многих проблем я смог добавить кнопку RETURN на цифровую клавиатуру.

Я хочу удалить его при вводе других данных в другие поля uitextfields, потому что в настоящее время эта кнопка появляется каждый раз, когда я использую клавиатуру, это часть клавиатуры.

Я добавляю обработчик событий на KeyBoardDidShow, в противном случае он не работает,

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

Тогда в KeyboarWillShow

- (void)keyboardWillShow:(NSNotification *)note {  

    // create custom button

    NSLog(@"El note es: %@", note);

    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    doneButton.frame = CGRectMake(0, 163, 106, 53);
    doneButton.adjustsImageWhenHighlighted = NO;
    [doneButton setImage:[UIImage imageNamed:@"done.jpg"] forState:UIControlStateNormal];
    [doneButton setImage:[UIImage imageNamed:@"done_pressed.jpg"] forState:UIControlStateHighlighted];
    [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];

    UIWindow *keyboardWindow = nil;
    for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) {
        if (![[testWindow class] isEqual:[UIWindow class]]) {
            keyboardWindow = testWindow;
            break;
        }
    }
    if (!keyboardWindow) return;

    // Locate UIKeyboard.
    UIView *foundKeyboard = nil;
    for (UIView *possibleKeyboard in [keyboardWindow subviews]) {

        // iOS 4 sticks the UIKeyboard inside a UIPeripheralHostView.
        if ([[possibleKeyboard description] hasPrefix:@"<UIPeripheralHostView"]) {
            possibleKeyboard = [[possibleKeyboard subviews] objectAtIndex:0];
        }

        if ([[possibleKeyboard description] hasPrefix:@"<UIKeyboard"]) {
            foundKeyboard = possibleKeyboard;
            break;
        }
    }

    if (foundKeyboard) {
        // Add the button to foundKeyboard.
        [foundKeyboard addSubview:doneButton];

    }
}

Дело в том, что это создает кнопку всегда! Очевидно! Я хотел бы создать кнопку только в некоторых uitextfields, не во всех, но как это сделать?

Метод - (BOOL) textFieldShouldBeginEditing: не выполняется в первый раз, только остальные, почему? Не знаю, но если бы я смог узнать, какое uitextfield вызывает клавиатуру, мои волосы снова отрастут, и я стану стройнее, кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Вы можете попытаться посчитать количество подпредставлений внутри клавиатуры, чтобы узнать, сколько у нее клавиш.Это плохой взлом, но у вас уже есть плохой взлом, чтобы найти клавиатуру :-)

Еще одно предложение:

 if (foundKeyboard) {
    UIView *doneButton = [foundKeyboard viewWithTag:BUTTON_TAG];

    if(numPad){
        if(buttonView==nil){
            //create doneButton
            [foundKeyboard addSubview:doneButton];          
        }
    }else{  
        [doneButton removeFromSuperview];
    }
}
0 голосов
/ 21 октября 2011

textFieldShouldBeginEditing: срабатывает последовательно только в том случае, если в каждом и каждом из ваших текстовых полей делегаты установлены правильно (проверьте ваш XIB).

И тогда вы можете установить значение тега в ваших текстовых полях. Вы можете отобразить кнопку «Возврат» для полей с тэгом 1 и без кнопки «Возврат» для полей с тэгом 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...