Не могу коснуться UITextField в UIScrollView - PullRequest
7 голосов
/ 21 апреля 2010

Я знаю, что об этом много говорили.Я думаю, что я прошел через все вопросы на этом сайте, и до сих пор не смог заставить это работать.

Я новичок в разработке, но у меня есть хорошее представление о том, что происходит со всем моим кодом.У меня определенно нет большого опыта, хотя, это мое первое приложение для iPhone.

Я создаю поле ввода данных, которое состоит из нескольких полей UITextFields в UIScrollView.Я пока не буду объяснять другие детали, так как это кажется основной проблемой.Без прокрутки текстовые поля работают отлично.Я могу дотронуться до текстового поля, и клавиатура или вид выбора отображаются соответственно.Когда я добавляю текстовые поля в вид прокрутки, вид прокрутки работает, но тогда текстовые поля не получают мои прикосновения.
Вот ключ: когда включена функция «Взаимодействие с пользователем», вид прокрутки работает, но прикосновения к текстовому полю НЕ регистрируются.,Когда «Взаимодействие с пользователем» отключено, представление прокрутки не работает, но текстовое поле касается «Зарегистрировано», и всплывает клавиатура / средство выбора.

Из других сообщений я видел людей, создающих подклассы и переопределяющих касания вотдельная реализация.Я видел людей, использующих пользовательские представления контента (подпредставления?), Я видел некоторые решения, которые сейчас устарели, поскольку API изменились в более новых версиях SDK, и я просто застрял.

Iпока пропущу мой код, потому что, может быть, есть решение, которое есть у кого-то без моего кода.Если кому-то понадобится увидеть мой код, я выложу его.Мое приложение пишется в SDK 3.1.3.

Если у кого-либо есть какая-либо информация, которая может помочь, это будет очень цениться.

Ответы [ 3 ]

6 голосов
/ 14 сентября 2012

Вот что у меня сработало в Xcode 4.3.3.

В раскадровке выберите свой scrollview. Выберите Attribute Inspector с правой стороны. Снимите отметку Delays Content Touches.

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

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

Если возможно, лучше всего использовать разные сенсорные механизмы для каждого процесса (прокрутка и ввод текстового поля).

Может быть, вы можете проверить разницу во времени между началом и концом касания, чтобы можно было определить разницу между перетаскиванием (прокрутка) и касанием (ввод текста).

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

[myObject addTarget:self action:@selector(itemTouchedUpInside:) forControlEvents:UIControlEventTouchUpInside];

, который передает объект, которого вы коснулись, чтобы вы могли идентифицировать его и действовать соответственно.

0 голосов
/ 22 июля 2010

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

Ваш объект контроллера представления, управляющий вашим представлением прокрутки, и ваши текстовые поля должны иметь объект UIScrollView и объект UIView(в дополнение к любым UITextField нужным вам объектам).В методе loadView класса контроллера представления выделите и инициализируйте объект UIView и добавьте в него свои текстовые поля в качестве подпредставлений.В конце метода выделите и инициализируйте объект UIScrollView, затем добавьте UIView к UIScrollView в качестве подпредставления.

Например, если ваш объект UIScrollView назывался scrollView иВаш UIView объект с именем mainView, следующие строки в конце метода loadView контроллера представления правильно настроили бы представление прокрутки с основным представлением с текстовыми полями на нем:

scrollView = [[UIScrollView alloc] initWithFrame: [[UIScreen mainScreen] bounds] ];
scrollView.backgroundColor = [UIColor whiteColor];
scrollView.contentSize = mainView.frame.size;
[scrollView addSubview: mainView];
self.view = scrollView;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...