Пользовательская кнопка на UIKeyboard - PullRequest
0 голосов
/ 07 сентября 2011

Я пытаюсь добавить пользовательскую кнопку «Готово» на UIKeyboard (в частности, цифровую клавиатуру).Я следовал за всеми примерами, чтобы сделать это онлайн, но я не могу заставить кнопку появляться выше клавиатуры.Ниже приведен мой код (в основном исправленный вместе из онлайн-примеров):

    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
doneButton.frame = CGRectMake(214, 427, 106, 53);
doneButton.adjustsImageWhenHighlighted = NO;
[doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
[doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
[doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];

UIWindow *tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
UIView *keyboard;
for(int i=0; i<[tempWindow.subviews count]; i++) 
{
    keyboard = [tempWindow.subviews objectAtIndex:i];
    if([[keyboard description] hasPrefix:@"<UIKeyboardTypeNumberPad"] == YES)
        [keyboard addSubview:doneButton];
}

Я что-то не так делаю?

(этот код вызывается после отображения клавиатуры).

РЕДАКТИРОВАТЬ:

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

        if([[keyboard description] hasPrefix:@"<UIKeyboardTypeNumberPad"] == YES)

, которая возвращает NO.Я проверил это с помощью уведомления UIKeyboardDidShow, поэтому клавиатура определенно видна при вызове кода.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2011

Я разобрался с решением.В iOS4.0 Apple изменила описание клавиатуры, поэтому теперь вам нужно использовать UIPeripheralHostView (это явно не лучший способ реализовать это решение, если Apple может изменить это значение в любое время).Мое позиционирование кнопки также было отключено, так как я располагал координату y по всему виду, а не только по клавиатуре.Вот окончательный код:

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


// create custom button
UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
doneButton.frame = CGRectMake(215, 163, 106, 53);
doneButton.adjustsImageWhenHighlighted = NO;
[doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
[doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
[doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];

UIWindow* tempWindow;

UIView* keyboard;

for(int c = 0; c < [[[UIApplication sharedApplication] windows] count]; c ++)
{
    tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:c];

    for(int i = 0; i < [tempWindow.subviews count]; i++)
    {
        keyboard = [tempWindow.subviews objectAtIndex:i];

        if([[keyboard description] hasPrefix:@"<UIPeripheralHostView"] == YES)
        {
            [keyboard addSubview:doneButton];
        }
    }
}

}

0 голосов
/ 07 сентября 2011

Я думаю, что вы пытаетесь жестко взломать код и нарушить HIG.

Если вы хотите настроить клавиатуру, вы должны создать свою собственную клавиатуру и установить ее на UIResponder s inputView.

...