Создание новой кнопки клавиатуры для iPhone - ошибка в InputAccessoryView и InputView - PullRequest
1 голос
/ 18 января 2012

Я создаю 2 UITextView в моей программе. Они должны будут сделать это:

  • TextView1 - будет новый InputView
  • TextView2 - будет обычная цифровая клавиатура с новой кнопкой

Поскольку цифровая клавиатура iPhone имеет пустую кнопку слева от нуля. Таким образом, я могу поместить туда UIView для имитации новой клавиатуры. Итак, я создал UIView с UIToolbar и этой кнопкой и установил в TextView с простым

[textView setInputAccessoryView:myView];    

Поймать клик внутри этого представления немного сложнее. Я должен создать подкласс principalClassName в main.m

int retVal = UIApplicationMain(argc, argv, MyPrincialClass ,MyDelegateClass);

Затем создайте этот класс с помощью

@interface MyPrincialClass : UIApplication
- (void)sendEvent:(UIEvent *)anEvent;
@end
@implementation MyPrincialClass
- (void)sendEvent:(UIEvent *)event {
    [super sendEvent:event];
    NSSet *touches = [event allTouches];
    UITouch *touch = touches.anyObject;
    [[NSNotificationCenter defaultCenter] postNotificationName:@"click" object:(id)touch];
}
@end

Теперь только прослушайте это Уведомление и проверьте, находится ли этот щелчок в правильной области.

Поскольку у меня есть UINavegationBar, я должен перейти к «Далее» и «Предыдущему» TextView. ОК, это только запуск

[textView1 resignFirstResponder];
[textView2 becomeFirstResponder];

Если все textView имеют один и тот же inputView (клавиатура), чем кнопка, то они работают нормально. Но ... Потому что один из этого textView имеет другой inputView, чем моя проблема запуска.

Если я сначала нажму в обычном UITextView с помощью кнопки, то кнопка будет отображаться правильно, как это. Красный квадрат находится над клавиатурой, поэтому он работает.

work fine

Если первый щелчок находится в UITextView с настроенным видом ввода, кнопка снова отображается правильно

I will not use this way, but work

но сейчас, если navegate с панелью инструментов (с простым resignFirstResponder и becomeFirstResponder), кнопка будет отображаться под клавиатурой

Fail... Fail again...

В резюме ... Вся проблема только в том, что я использую пользовательское представление ввода. Если я использую только клавиатуру, у меня не будет никаких проблем.

Чтобы решить эту проблему, просто поместите пользовательскую кнопку UIView над клавиатурой. Я пытаюсь получить основной UIWindows и отправить сообщение:

[[UIApplication sharedApplication].keyWindow bringSubviewToFront:myview];

Но не работа. Любая идея, чтобы решить эту ошибку ??

Ответы [ 2 ]

0 голосов
/ 25 января 2012

Я это исправлю. Идея заключалась в том, чтобы найти UIView клавиатуры и добавить кнопку, как подпредставление. Это были коды:

- (void)keyboardDidShow {
    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
    UIView* keyboard;
    for(UIView* potentialKeyboard in tempWindow.subviews) {
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
            if([[potentialKeyboard description] hasPrefix:@"<UIPeripheralHost"] == YES) {
                keyboard = potentialKeyboard;
            } else {
                if([[potentialKeyboard description] hasPrefix:@"<UIKeyboard"] == YES) {
                    keyboard = potentialKeyboard;
                }
            }
        }
    }
    [keyboard addSubview:key];
    [keyboard bringSubviewToFront:key];
}
0 голосов
/ 23 января 2012

Надеюсь, я вас правильно понял, и я бы предложил вам управлять позицией кнопки Z.Так что это может появиться над всем компонентом.Для простоты я предлагаю вам следующий открытый код, Управление порядком просмотров Z .Надеюсь, это поможет вам, если нет, пожалуйста, дайте мне знать.

Ура, Арун.

...