Вопрос по iphone, objective-c – Phonegap: полное удаление черной полосы с клавиатуры iPhone

12

Мы используем Phonegap для разработки нашего мобильного приложения и заимствовали здесь код, чтобы удалить черную полосу «следующий / предыдущий / сделанный» с клавиатуры:

https://stackoverflow.com/a/9276023/35364

Этот код находит черную полосу в виде объекта UIView и вызывает «removeFromSuperview» apos; в теме.

Мы не знакомы с iOS SDK / API. Поэтому, хотя мы можем посмотреть на код и получить представление о том, что он делает, мы не можем сказать, правильно ли он это делает или как его улучшить.

Конкретная проблема, с которой мы сталкиваемся:

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

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

Это происходит, хотя текстовое полеis видимый.

Я заметил, что, поместив поле ввода прямо над тем местом, где обычно находится черная полоса (в отличие от нее позади), представление не прокручивается.

Так что, похоже, система почему-то думает, что черная полоса все еще там!

(Для двойной проверки: когда черная полоса не удалена и мы поместили текстовое поле прямо над ней, мы можем сфокусироваться и напечатать ее, и представление не будет прокручиваться).

Итак, вопрос:

Почему "система"? перемещать содержимое вверх при редактировании текстового поля, которое находится "справа" позади "quot;" где черная полоса должна быть? Это потому, что черная полоса еще не полностью удалена? Нужно ли нам что-то делать, чтобы «полностью» удалить черную полосу? Нужно ли заставлять iOS пересчитывать размер клавиатуры? или что именно?

Реализован ли этот механизм (увеличение представления) в iOS UIWebView или в Phonegap?

Есть ли какое-либо приложение для телефонной связи, которое решило эту проблему?

Ваш Ответ

2   ответа
0

Это сработало для меня:https://github.com/don/KeyboardToolbarRemover

Вы должны знать, однако, что с Phonegap 2.3.0 нет файла Cordova.plist - вместо этого отредактируйте ваш XML-файл конфигурации следующим образом:

<plugin name="KeyboardToolbarRemover" value="KeyboardToolbarRemover" />

в ветке

9

замещать

[subviewWhichIsPossibleFormView removeFromSuperview];

с

UIScrollView *webScroll = [webView.subviews lastObject];
CGRect newFrame = webScroll.frame;

float accesssoryHeight = subviewWhichIsPossibleFormView.frame.size.height;
newFrame.size.height += accesssoryHeight;

[subviewWhichIsPossibleFormView removeFromSuperview];
[webScroll setFrame:newFrame];

изменяет размер представления прокрутки контента на количество недостающего дополнительного пространства. Насколько это возможно, используется "частный API" как другой код. Подробно, он не использует частный API напрямую, но если Apple решит изменить способ отображения представления (в данном случае Keyboard и WebView), то произойдет сбой.
Например, если они переименовываютUIWebFormAccessory, ваш код больше не будет работать.

РЕДАКТИРОВАТЬ:
на iOS 5.0+ можно звонитьwebView.scrollView непосредственно. Таким образом, вы можете разделить код, чтобы иметь запасной вариант до iOS 5:

UIScrollView *webScroll;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) {
    webScroll = webView.scrollView;
} else {
    webScroll = [webView.subviews lastObject]; // iOS 2.x (?) - 4.x
    // make sure this code runs appropriate on older SDKs
}
Error: User Rate Limit ExceededIBOutletError: User Rate Limit ExceededNSLog(%@, self.webView.subviews)Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededUIScrollView *webScroll = [self.webView.subviews lastObject];Error: User Rate Limit Exceeded hasen
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededself.webView.scrollViewError: User Rate Limit Exceeded hasen
Error: User Rate Limit Exceeded hasen

Похожие вопросы