2010-04-21 3 views
7

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

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

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

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

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

Если у кого-то есть ЛЮБАЯ информация, которая могла бы помочь, это было бы очень признательно.

ответ

0

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

Ваш объект вид контроллера управления Ваш взгляд прокрутки и текстовые поля должны иметь UIScrollView объект и UIView объект (в дополнение к любым UITextField объектам, вам нужно). В методе loadView класса контроллера view выделите и инициализируйте объект 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; 
0

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

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

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

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

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

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

3

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

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