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

Swift

Войти
Регистрация
Восстановить пароль
 
Nikita_Krasnov
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 10
#1

Как сделать сдвиг контента в UIScrollView при вводе данных в TextField? - Swift

14.05.2015, 14:08. Просмотров 1055. Ответов 4
Метки нет (Все метки)

Итак подробней. Есть ViewController. Внутри него UIScrollView. На этом ScrollView есть элементы типа Label, TextField, Button. Но проблема в том что когда я хочу ввести данные в TextField который находится внизу, выдвигающаяся клавиатура перекрывает поле ввода, и соответственно я не могу видеть что я ввожу. В некоторых приложениях я видел что когда поле TextField находится внизу, то при нажатии на него выскакивает клавиатура, а все элементы сдвигаются вверх так, что поле, в которое я собираюсь вводить данные, будет находиться четко над клавиатурой. Так как мне сделать такое же у себя? Если это делается программно, то пожалуйста напишите на Swift, так как диплом пишу на нём.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2015, 14:08     Как сделать сдвиг контента в UIScrollView при вводе данных в TextField?
Посмотрите здесь:

Как сохранить введенные данные пользователя в поле TextField нажатием клавиши «done» на клавиатуре? - Swift
Всем привет! Помогите решить проблему. Есть поле UITextField, пользователь вводит в него текст и нажимает на клавиатуре кнопку "Done",...

Textfield деление - Swift
Есть два текстфилда, нужно сделать так, что бы по нажатию кнопки введенное число в первый текстфилд делилось на число введенное во второй...

Посчитать определенные символы в TextField - Swift
Уже голову сломал как делать... Думаю что надо создать строку с этим символом и присвоить ей единицу, но не получается...

Скрыть символы в textField. Запретить ввод менее 6 символов! - Swift
Добрый день программеры iOS! Вот пытаюсь разработать страницу регистрации в мобильном приложении (учу Swift) как Вы уже, думаю,...

Как сделать очередь и убрать паузу программы при вводе данных? - C++
Написал прогу, при вводе новый параметров детали программа останавливается, как можно переделать, что бы этого не было? И как сделать...

Ошибка при не верном вводе данных. Как сделать ее информативным для пользователей? - PHP БД
Не большой скрипт, с несколькими полями для ввода. из первого поля я вытаскиваю нужные данные методом explode, и потом записываю все это в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HellBoy4eG
7 / 7 / 1
Регистрация: 15.10.2013
Сообщений: 18
15.05.2015, 11:47     Как сделать сдвиг контента в UIScrollView при вводе данных в TextField? #2
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
33
34
35
36
37
38
39
40
41
42
43
//Скрол
@IBOutlet weak var scrollView: UIScrollView!
 
//подписываешься на Нотификации
        NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWasShown:"), name: UIKeyboardWillShowNotification, object: nil)
        NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWasHidden:"), name: UIKeyboardWillHideNotification, object: nil)
 
//Black Magic
    func keyboardWasShown(notif: NSNotification) {
        if self.scrollView != nil {
            let dictInfo: NSDictionary = notif.userInfo!
            let valInfo: NSValue = dictInfo.valueForKey(UIKeyboardFrameBeginUserInfoKey)! as! NSValue
            let arect: CGRect = valInfo.CGRectValue()
            let insets: UIEdgeInsets = UIEdgeInsetsMake(self.scrollView.contentInset.top, 0, arect.height + 20, 0)
            //UIEdgeInsetsMake(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) -> UIEdgeInsets
            
            if let view:AnyObject = UIWindow.getEditingViewOnView(self.scrollView) {
                let scrollH = self.scrollView.frame.size.height - insets.bottom
                var y = (view as! UIView).frame.origin.y - (scrollH / 3)
                if y < 0 {
                    y = 0
                }
                self.scrollView.setContentOffset(CGPointMake(0, y), animated: false)
            }
            
            self.scrollView.contentInset = insets
            self.scrollView.scrollIndicatorInsets = insets
        }
    }
    
    func keyboardWasHidden(notif: NSNotification) {
        if self.scrollView != nil {
            let dictInfo: NSDictionary = notif.userInfo!
            let valInfo: NSValue = dictInfo.valueForKey(UIKeyboardFrameBeginUserInfoKey)! as! NSValue
            let arect: CGRect = valInfo.CGRectValue()
            
            let insets: UIEdgeInsets = UIEdgeInsetsMake(self.scrollView.contentInset.top, 0, 0, 0)
            
            self.scrollView.contentInset = insets
            self.scrollView.scrollIndicatorInsets = insets
//            self.scrollView.setContentOffset(CGPointMake(0, 0), animated: true)
        }
    }
Nikita_Krasnov
0 / 0 / 0
Регистрация: 09.07.2013
Сообщений: 10
15.05.2015, 12:00  [ТС]     Как сделать сдвиг контента в UIScrollView при вводе данных в TextField? #3
Спасибо вам большое! я уже подправил некоторые ошибки, осталась только одна, не знаю что с ней делать.
UIWindows.Type does not have a member named 'getEditingViewOnView'.

может это из-за Xcode? у меня стоит 6.2, и допустим вы в некоторых местах ставили восклицательные знаки, а мой Xcode показал что они не нужны.
HellBoy4eG
7 / 7 / 1
Регистрация: 15.10.2013
Сообщений: 18
15.05.2015, 12:34     Как сделать сдвиг контента в UIScrollView при вводе данных в TextField? #4
Xcode 6.3
создай категорию UIWindow, и добавь этот метод, ну или по своему реализуй!

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
+ (UIView*)getEditingViewOnView:(UIView*)superview {
    for (UIView *subView in superview.subviews)
    {
        if (subView.isFirstResponder) {
            return subView;
        }
        UIView *view = [self getEditingViewOnView:subView];
        if (view != nil) {
            return view;
        }
    }
    return nil;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2015, 18:47     Как сделать сдвиг контента в UIScrollView при вводе данных в TextField?
Еще ссылки по теме:

Рамка поиска при вводе смещается в сторону контента - DLE
Привет всем сразу предупреждаю в верстке я профан занимался ремонтом ПК так-что рассчитываю на понимание. Кто нибудь устанавливал себе...

Как сделать запрос пользователю о вводе данных? - C++ Builder
У меня есть программа по симплекс-методу. Когда данные введены изначально - все хорошо считает. Но мне надо сделать так, что бы...

Как сделать, что в VB6 при нажатии команды выдавало ошибку при вводе одинакового значения - Visual Basic
Здравствуйте! Подскажите, пожалуйста, если при нажатии команды в vb6, в html файл записывается строка со значением: &lt;section id=&quot;003&quot; &gt;...

Подскажите как сделать подргузку контента при нажатии на ссылку? - JavaScript
Подскажите как сделать подргузку контента при нажатии на ссылку?при помощи jQuery

Как сделать чтобы при вводе текста в поле, при введении каждого нового символа фильтр обновлялся, а текст в по - MS Access
Написал фильтр для поля формы, он как только фокус возвращается в поле, весь текст выделяется и при введении символа весь предыдущий текст...


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

Или воспользуйтесь поиском по форуму:
smth
177 / 46 / 6
Регистрация: 23.06.2011
Сообщений: 247
15.05.2015, 18:47     Как сделать сдвиг контента в UIScrollView при вводе данных в TextField? #5
Так как редактируемый элемент на экране может быть только 1, который во время редактирования становится first responder - то алгоритм таков:
1) в начале редактирования (при тапе на textfield или textview) надо сохранить ссылку на редактируемое поле. Для этого надо ввести property (хотя я пользуюсь ivar - не люблю свойства плодить). Тип ссылки - UITextField или UITextView. Хотя, я в последнее время использую тупо базовый класс UIView (удобно, когда на одном экране оба типа присутствуют). Узнать начало процесса редактирвоания можно с помощью делегата от соответствующего типа (например TextFieldShouldBeginEditing)
2) в конце редактирования надо просто вызвать ссылкой resignfirstresponder.

Данный способ проще и работает всегда. А то, что написалHellBoy4eG, содержит цикл, if'ы - что замедляет выполнение программы. Более того, при использовании сложной иерархии видов оно вообще работать не будет.

Вообще, все это довольно просто ищется в англоязчном гугле. Вот тут очень понятно описано то, о чем я сказал.

И неважно, swift или objective c. Алгоритм одинаков, а переписать с одного языка на другой данный пример - раз плюнуть.
Yandex
Объявления
15.05.2015, 18:47     Как сделать сдвиг контента в UIScrollView при вводе данных в TextField?
Ответ Создать тему
Опции темы

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