Форум программистов, компьютерный форум CyberForum.ru

Программирование iOS/iPhone

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
freeax
2 / 2 / 1
Регистрация: 19.09.2012
Сообщений: 136
#1

При показе клавиатуры часть таблицы остается под ней - Программирование iOS

04.02.2013, 08:38. Просмотров 1742. Ответов 13
Метки нет (Все метки)

Уважаемые гуру!

Пишу приложение для IPhone на Objective-C в xcode. Собственно, при показе клавиатуры часть таблицы остается под ней. Подскажите как решить проблему, плиз!

код прилагается
task1.zip

таблица UITableView, интерфейс UIViewController
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2013, 08:38     При показе клавиатуры часть таблицы остается под ней
Посмотрите здесь:
Организационная часть, при добавлении в AppStore
Каким образом сдвигать контент вверх при отображении клавиатуры?
Создание приложения под J2ME. Фильтр камеры под эффект фильма Матрица
LinearLayout при вызове клавиатуры остается на месте Android
MySQL Создание таблицы, где часть полей берётся из другой таблицы, а часть создаётся заново
Android При вводе цифр не видна часть клавиатуры
Моргание при показе формы C++ Qt
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Монфрид
1194 / 1004 / 153
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
04.02.2013, 11:06     При показе клавиатуры часть таблицы остается под ней #2
э, а что вы собственно хотите? клавиатура появляется, значит закроет часть представления
freeax
2 / 2 / 1
Регистрация: 19.09.2012
Сообщений: 136
04.02.2013, 11:50  [ТС]     При показе клавиатуры часть таблицы остается под ней #3
Цитата Сообщение от Монфрид Посмотреть сообщение
э, а что вы собственно хотите? клавиатура появляется, значит закроет часть представления
нужно чтобы этого не происходило. Например, подтягивать таблицу как-нибудь.... и уменьшить клаву...
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
04.02.2013, 12:47     При показе клавиатуры часть таблицы остается под ней #4
Не надо клаву меньшить. Надо таблицу сдвинуть. Читайте про UIKeyboardWillShowNotification и UIKeyboardWillHideNotification.
Vorona
Peace 2 all shining faces
667 / 529 / 45
Регистрация: 05.03.2010
Сообщений: 1,273
04.02.2013, 22:59     При показе клавиатуры часть таблицы остается под ней #5
ага, на вышеупомянутых нотификациях:
как вариант - положить таблицу на скроллвью и подтянуть на нужный оффсет когда клавиатура появится
еще как вариант - изменить frame вьюхи или таблицы, - чего угодно
Objective-C
1
2
3
CGRect frame = self.view.frame; 
frame.origin.y = -100; 
[self.view setFrame:frame];
ну и т.д., можно прогуглить кучу способов
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
05.02.2013, 07:29     При показе клавиатуры часть таблицы остается под ней #6
И изменять нужно анимированно. Время анимации - 0.25.
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
05.02.2013, 11:50     При показе клавиатуры часть таблицы остается под ней #7
Если верит моим экспериментам, 0.275 . Но, думаю, где-то должна быть константа на этот счет.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
05.02.2013, 13:25     При показе клавиатуры часть таблицы остается под ней #8
Цитата Сообщение от mobidevelop Посмотреть сообщение
Если верит моим экспериментам, 0.275 . Но, думаю, где-то должна быть константа на этот счет.
Вполне реально, но учитывая частоту обновления экрана - разницу не сильно будет заметно
freeax
2 / 2 / 1
Регистрация: 19.09.2012
Сообщений: 136
07.02.2013, 09:42  [ТС]     При показе клавиатуры часть таблицы остается под ней #9
Цитата Сообщение от Vorona Посмотреть сообщение
ага, на вышеупомянутых нотификациях:
как вариант - положить таблицу на скроллвью и подтянуть на нужный оффсет когда клавиатура появится
еще как вариант - изменить frame вьюхи или таблицы, - чего угодно

Кликните здесь для просмотра всего текста

Objective-C
1
2
3
CGRect frame = self.view.frame; 
frame.origin.y = -100; 
[self.view setFrame:frame];
ну и т.д., можно прогуглить кучу способов

Вот, что вышло

Кликните здесь для просмотра всего текста

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
- (void)keyboardWillShow:(NSNotification *)notification {
    NSDictionary *userInfo = [notification userInfo];
    NSValue *keyboardBoundsValue = [userInfo objectForKey:UIKeyboardBoundsUserInfoKey];
    [keyboardBoundsValue getValue:&keyboardBounds];
    keyboardIsShowing = YES;
    [self resizeViewControllerToFitScreen];
}
 
- (void)keyboardWillHide:(NSNotification *)notification {
    keyboardIsShowing = NO;
    keyboardBounds = CGRectMake(0, 0, 0, 0);
    [self resizeViewControllerToFitScreen];
    
}
 
- (void)resizeViewControllerToFitScreen {
 
    CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
    CGRect frame = self.view.frame;
    frame.size.height = applicationFrame.size.height;
    
    if (keyboardIsShowing) {
        frame.size.height -= keyboardBounds.size.height;
        [self.view setFrame:frame];
    }
    
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:0.3f];
    self.view.frame = frame;
    [UIView commitAnimations];
}


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

Добавлено через 2 часа 44 минуты
переделал, работает

Кликните здесь для просмотра всего текста

Objective-C
1
2
3
4
5
6
if (keyboardIsShowing) {
        tableFrameSave = self.myTable.frame;
        self.myTable.frame = CGRectMake(0, keyboardBounds.origin.y, applicationFrame.size.width, tableFrameSave.size.height - keyboardBounds.size.height);
    } else {
        self.myTable.frame = tableFrameSave;
    }


Добавлено через 47 секунд
Цитата Сообщение от Vorona Посмотреть сообщение
ага, на вышеупомянутых нотификациях:
Еще такая проблема, у меня UITableView внутри UIScrollView
Нужно выполнить код при прокрутке. Подскажите, в сторону каких методов копать?
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
07.02.2013, 12:43     При показе клавиатуры часть таблицы остается под ней #10
Цитата Сообщение от freeax Посмотреть сообщение
Еще такая проблема, у меня UITableView внутри UIScrollView
Нужно выполнить код при прокрутке. Подскажите, в сторону каких методов копать?
TableView (который тоже UIScrollView) на scrollView это уже плохо. Это точно обязательно? Есть случаи, когда не тот скролл скроллиться начинает.

А по теме, либо UIScrollViewDelegate, либо делайте наследник UIScrollView и перегружайте layoutSubviews. Смотря что за код. Тут недавно такая тема была.
freeax
2 / 2 / 1
Регистрация: 19.09.2012
Сообщений: 136
07.02.2013, 13:02  [ТС]     При показе клавиатуры часть таблицы остается под ней #11
Цитата Сообщение от mobidevelop Посмотреть сообщение
TableView (который тоже UIScrollView) на scrollView это уже плохо. Это точно обязательно? Есть случаи, когда не тот скролл скроллиться начинает.

А по теме, либо UIScrollViewDelegate, либо делайте наследник UIScrollView и перегружайте layoutSubviews. Смотря что за код. Тут недавно такая тема была.
то есть TableView уже включает в себя UIScrollView?
Если так, то я могу вполне убрать UIScrollView под таблицей

мой код
task1v2.zip
может поможете? буду очень блогадарен!

я просто только начинаю вникать в разработку под iphone и objectiv-c изучаю меньше недели. Как говорится галопом по европам((((
freeax
2 / 2 / 1
Регистрация: 19.09.2012
Сообщений: 136
07.02.2013, 13:10  [ТС]     При показе клавиатуры часть таблицы остается под ней #12
только вот проблема, когда я убрал сколвью под тейблой, почему-то при подтягивании таблицы, в момент когда клавиатура поднимается, сдвигается textField(( и это очень плохо
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
07.02.2013, 13:14     При показе клавиатуры часть таблицы остается под ней #13
Не включает. Наследует. ScrollView можно смело выкидывать.
А в целом нормально для первой недели
Замечаний 2: датасорс для таблицы лучше задать в ксибке и обращайте внимание на ворнинги. UIKeyboardBoundsUserInfoKey устарел еще в 3.2.

А чтобы textField не поднимался, его просто поднимать не надо height у таблицы поменяйте и больше ничего.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2013, 00:58     При показе клавиатуры часть таблицы остается под ней
Еще ссылки по теме:
PHP Как делаются сайты, у которых часть всегда остается загруженной на экране?
Перенос строки при показе из базы PHP
Поменять ZOrder форм при их показе Lazarus
При наложении на картинку анимации, двигается и текст под ней HTML, CSS
Определить максимальное из значений суммы элементов над главной диагональю, на ней и под ней Pascal ABC

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
dollar8
13 / 13 / 3
Регистрация: 25.09.2011
Сообщений: 84
12.02.2013, 00:58     При показе клавиатуры часть таблицы остается под ней #14
ТейблВью наследуется от КсролВью (это так между прочим)
ПОэтому когда клава показывается, двигай фрейм У ТейблВью или скроль вверх сколько тебе надо.
Yandex
Объявления
12.02.2013, 00:58     При показе клавиатуры часть таблицы остается под ней
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru