2010-04-21 10 views
7

Wiem, że dużo o tym mówiono. Wydaje mi się, że przeszedłem przez każde pytanie na tej stronie i nadal nie mogłem tego zrobić.Nie można dotknąć UITextField na UIScrollView

Jestem nowy w rozwoju, ale mam dobre wyczucie tego, co się dzieje z całym moim kodem. Zdecydowanie nie mam dużego doświadczenia, to moja pierwsza aplikacja na iPhone'a.

Robię pole wprowadzania danych, które składa się z wielu UITextFields w ramach UIScrollView. Na razie uniknę wyjaśnienia innych szczegółów, ponieważ wydaje się, że jest to bardzo podstawowy problem. Bez przewijania pola tekstowe działają idealnie. Mogę dotknąć pola tekstowego i odpowiednio wyświetlić widok klawiatury lub selektora. Kiedy dodaję pola tekstowe do przewijania, przewijanie działa, ale wtedy pola tekstowe nie otrzymują moich dotknięć.
Oto klucz: Kiedy "interakcja użytkownika" jest WŁĄCZONA, przewijanie działa, ale NIE są rejestrowane dotknięcia pola tekstowego. Kiedy "interakcja użytkownika" jest WYŁĄCZONA, przewijanie nie działa, ale pole tekstowe dotyka ARE jest zarejestrowane i pojawia się klawiatura/selektor.

Z innych stanowisk widziałem ludzi tworzących podklasy i nadpisujących dotknięcia w osobnej implementacji. Widziałem ludzi używających niestandardowych widoków treści (subviews?), Widziałem kilka rozwiązań, które są teraz przestarzałe, ponieważ API zmieniły się w nowszych wersjach SDK, a ja po prostu całkowicie utknąłem.

Na razie pominę mój kod, ponieważ być może istnieje rozwiązanie, które ktoś ma, nie wymagając mojego kodu. Jeśli ktoś potrzebuje zobaczyć mój kod, to go podam. Moja aplikacja jest zapisana w pakiecie SDK 3.1.3.

Jeśli ktokolwiek ma JAKIEKOLWIEK informacje, które mogłyby pomóc, byłby bardzo doceniony.

Odpowiedz

0

Wygląda na to, że używasz IB, aby wykonać wiele układów interfejsu użytkownika. Jeśli podejmiesz programowe podejście, możesz ustawić następującą hierarchię widoków, która powinna działać.

Obiekt kontrolera widoku zarządzający widokiem przewijania i polami tekstowymi powinien mieć obiekt UIScrollView i obiekt UIView (oprócz wszelkich wymaganych obiektów o wartości UITextField). W metodzie loadView klasy kontroler widoku, przydzielaj i inicjalizuj obiekt UIView i dodaj do niego pola tekstowe jako subviews. Na końcu metody, przydzielaj i inicjalizuj obiekt UIScrollView, a następnie dodaj UIView do UIScrollView jako widok podrzędny.

Jako przykład, jeśli obiekt UIScrollView nazywano Scrollview i swoją UIView obiektu o nazwie MAINVIEW poniższe linie na końcu metody loadview kontrolera widok byłby prawidłowo skonfigurować widok przewijania z głównego widoku z pól tekstowych na nim :

scrollView = [[UIScrollView alloc] initWithFrame: [[UIScreen mainScreen] bounds] ]; 
scrollView.backgroundColor = [UIColor whiteColor]; 
scrollView.contentSize = mainView.frame.size; 
[scrollView addSubview: mainView]; 
self.view = scrollView; 
0

Konieczne może być włączenie/wyłączenie interakcji użytkownika dla widoku przewijania i pól tekstowych, jeśli to konieczne.

Jeśli to możliwe, najlepiej można użyć różnych mechanizmów dotykowych dla każdego procesu (przewijanie i wejście pola tekstowego).

Może można sprawdzić różnicę czasu między początkiem i końcem dotknięcia, aby można było wykryć różnicę między oporem (przewijaniem) a dotknięciem (wprowadzanie tekstu).

Powiedziawszy, że jeśli propagujesz akcenty z pól tekstowych do przewijania, powinieneś być w porządku.Jedną z rzeczy, używam to:

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

który przechodzi przedmiot dotknął więc można go zidentyfikować i podjąć odpowiednie działania.

3

Oto, co zadziałało dla mnie w Xcode 4.3.3.

W scenorysie wybierz swoją scrollview. Wybierz Attribute Inspector po prawej stronie. Odznacz Delays Content Touches.

Powiązane problemy