2011-11-30 15 views
9

Immaginate, c'è un UIViewController con un UIScrollView in esso. Nella parte superiore della vista c'è un UIImageView, alcuni UILabels e altre cose. Inoltre, c'è un UITableView che il contenuto è Dynamic Prototypes. Allego una foto per mettere in chiaro:UITableView in un UIScrollView - Come far scorrere la vista, ma non il TableView in sé stesso?

enter image description here

non ho una quantità statica di cellule nel UITableView quindi potrebbe essere scorrevole. Il mio problema è il seguente: l'UITableView scorre in sé ma voglio scorrere l'intera vista. Qual è la migliore possibilità di farlo?


possibili soluzioni che ho fondato oggi

1) la prima cosa è: creo un UITableViewController e dichiaro una sezione di intestazione in cui includo tutte le mie etichette, immagini ecc programmazione (mi piacerebbe per utilizzare il generatore di interfaccia per questo ...)

2) Un'altra soluzione è calcolare l'altezza della vista. Ho provato il meglio per farlo in questo modo - ma: senza successo. Se questo è il modo migliore per farlo: qualcuno può dare un esempio?

risposta

19

Vorrei abbandonare il UIScrollView e utilizzare solo un UITableView. È possibile aggiungere un oggetto UIView come tableHeaderView di UITableView semplicemente trascinandolo in Interface Builder. Ora poiché tutto fa parte della gerarchia UITableView, tutto scorre insieme come previsto.

+0

Grazie mille! Hai fatto la mia giornata - è come un regalo di Natale preferito; o) –

+1

/tocca un dito al naso e scuote il camino di SO –

+0

Ti ha dato una risposta positiva, ottima risposta. Meglio del mio. :) –

1

Dovrai (come hai detto) aggiungere UIView contenente l'immagine e i pulsanti all'effettivo UITableView. L'incorporamento nella visualizzazione a scorrimento produrrà il comportamento indesiderato che stai vedendo.

Si consiglia di restituire UIView come visualizzazione dell'intestazione per la prima sezione della visualizzazione tabella. È possibile farlo attraverso l'attuazione del metodo UITableViewDelegate:

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

Se si mantiene un IBOutlet alla vista che contiene la tua immagine/etichette, è possibile tornare qui.

+0

Grazie per la risposta. Se lo faccio in questo modo, devo implementare tutte le immagini/etichette a livello di codice, giusto? Voglio evitare che ... –

+0

No, puoi ancora utilizzare Interface Builder, purché il 'UIView' che contiene le tue immagini/etichette sia definito come' IBOutlet' su 'UITableViewDelegate'. –

+0

ah okay! Ora capisco cosa intendi. Hai ragione! Un'ottima soluzione, grazie per questo :-) –

2

Si potrebbe anche provare a impostare delaysContentTouches su NO sul scrollView. A seconda della configurazione, questo potrebbe far sì che la vista di scorrimento risponda prima al tocco anziché alla vista tabella.

dalle mele UIScrollView Docs:

delaysContentTouches

Un valore booleano che determina se la vista di scorrimento ritarda la gestione di gesti touch-down.

@property(nonatomic) BOOL delaysContentTouches

Discussione

Se il valore di questa proprietà è YES, la vista di scorrimento ritardi movimentazione il gesto touch-down fino a che non può determinare se lo scorrimento è il intento.Se il valore è NO, la visualizzazione di scorrimento chiama immediatamente touchesShouldBegin:withEvent:inContentView:. Il valore predefinito è YES.

+0

Ci proverò anch'io - sembra essere un'altra grande soluzione. Grazie :-) –

Problemi correlati