2011-11-30 14 views
9

Wyobraź sobie, że istnieje UIViewController z UIScrollView w nim. U góry widoku znajduje się UIImageView, kilka UILabeli i inne rzeczy. Co więcej, istnieje UITableView, którego treść to Dynamiczne prototypy. Załączam obrazek, aby było jasne:UITableView w UIScrollView - jak zrobić przewijanie widoku, ale nie sam TableView?

enter image description here

Nie mam statycznego ilość komórek w UITableView więc to może być przewijane. Mój problem jest następujący: UITableView przewija się w sobie, ale chcę przewinąć cały widok. Jaka jest najlepsza możliwość zrobienia tego?


Możliwe rozwiązania Mam założone dzisiaj

1) Pierwszą rzeczą jest: tworzę UITableViewController i zadeklarować sekcję nagłówka, w którym zawierać wszystkie moje etykiet, obrazów itp programowo (chciałbym użyć budowniczego interfejsu do tego ...)

2) Innym rozwiązaniem jest obliczenie wysokości widoku. Starałem się jak najlepiej to robić w ten sposób - ale: bez powodzenia. Jeśli jest to najlepszy sposób, aby to zrobić: Czy ktoś może podać przykład?

Odpowiedz

19

Chciałbym porzucić UIScrollView i po prostu użyć UITableView. Możesz dodać obiekt UIView jako tableHeaderView z UITableView po prostu przeciągając go w Konstruktorze interfejsu. Teraz, ponieważ wszystko jest częścią hierarchii UITableView, wszystko przewinie się zgodnie z oczekiwaniami.

+0

Dziękuję bardzo! Zrobiłeś mój dzień - to jest jak ulubiony świąteczny prezent; o) –

+1

/dotyka palcem w nosie i rakiet w górę Komin SO 2 –

+0

Dałem ci uprowadzenie, bardzo dobra odpowiedź. Lepszy niż mój. :) –

1

Będziesz musiał (jak już wspomniano) dodać UIView zawierający obraz i przyciski do rzeczywistego UITableView. Osadzenie go w widoku przewijania spowoduje niepożądane zachowanie, które widzisz.

Polecam zwrócić UIView jako widok nagłówka pierwszej sekcji widoku tabeli. Można to zrobić poprzez wdrożenie metody UITableViewDelegate:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; 

Jeśli utrzymują IBOutlet do widoku zawierającego swoim dysku/etykiet, można go zwrócić tutaj.

+0

Dziękuję za odpowiedź. Jeśli robię to w ten sposób, muszę programowo zaimplementować wszystkie obrazy/etykiety, prawda? Chcę tego uniknąć ... –

+0

Nie, nadal możesz używać Kreatora interfejsu, o ile 'UIView' zawierający twoje obrazy/etykiety jest zdefiniowany jako' IBOutlet' na 'UITableViewDelegate'. –

+0

ah okay! Teraz rozumiem, co masz na myśli. Masz rację! Świetne rozwiązanie, dziękuję za to :-) –

2

Możesz także spróbować ustawić delaysContentTouches na NO na swoim scrollView. W zależności od konfiguracji, widok przewijania może reagować najpierw na dotyk, a nie na widok tabeli.

z jabłek UIScrollView Docs:

delaysContentTouches

Wartość logiczna, która określa, czy widok przewijania opóźnia obsługę gestów dotykowych-dół.

@property(nonatomic) BOOL delaysContentTouches

Dyskusja

Jeśli wartość tej właściwości jest YES, widok przewijania opóźnienia obchodzenia gest dotykowy aż można go określić, czy przewijanie jest intencją.Jeśli wartość wynosi NO, widok przewijania natychmiast wywołuje touchesShouldBegin:withEvent:inContentView:. Domyślna wartość to YES.

+0

Spróbuję też - wydaje się kolejnym świetnym rozwiązaniem. Dzięki :-) –

Powiązane problemy