2009-10-23 12 views
7

Ho problemi a creare un UIView (in Interface Builder) che contiene un UITableView con qualche altro oggetto, come UIButton o UILabel. UITableView occupa sempre la massima quantità di spazio in UIView, indipendentemente dalle dimensioni dell'oggetto stesso di UITableView. Il proprietario del file è un UITableViewController standard.UITableView utilizza tutto lo spazio disponibile in Interface Builder

+1

Potresti rinominarlo in qualcosa come: "UITableView utilizza tutto lo spazio disponibile in Interface Builder"? Il titolo attuale non è molto descrittivo – Casebash

risposta

12

Ecco come farlo facilmente:

1) Creare un controller di visualizzazione tabella con xib.

2) Modificare il tipo ereditato nel file .h da UITableViewController, in UIViewController.

3) Aggiungere i protocolli UITableViewDataSource, UITableViewDelegate al file .h.

4) Aprire lo xib, aggiungere una vista.

5) trascinare la vista tabella nello xib sotto la vista, ridimensionare come desiderato.

6) Collegare la proprietà "view" del proprietario del file alla vista anziché a UITableView. L'origine dati e le proprietà delegate della vista tabella devono essere ancora collegate al proprietario del file.

7) (facoltativo) se si desidera essere in grado di ricaricare o accedere in altro modo alla tabella al di fuori dei metodi di delega del controller della vista tabella che passano in una vista tabella, creare un IBOutlet UITableView * denominato "myTable" o simile, e collegare il tavolo in IB a quello.


Un approccio alternativo è quello di fare una nuova UIViewController con XI ter, aggiungere una tabella alla XI ter, origine dati wire/delegato al proprietario del file, e fare una nuova classe UITableViewController che si usa per copiare i metodi da dentro il tuo controller di visualizzazione, quindi elimina.

+1

Questo è il modo giusto per farlo.Dai documenti Apple: "Se la vista da gestire è una vista composita in cui una vista tabella è una delle subviews multiple, è necessario utilizzare una sottoclasse personalizzata di UIViewController per gestire la vista tabella (e altre viste). Non utilizzare un UITableViewController oggetto perché questa classe controller dimensiona la vista tabella per riempire lo schermo tra la barra di navigazione e la barra delle schede (se presente). " – bpapa

+0

Anche un passaggio penso che sia necessario aggiungere Kendall: dovrà aggiungere esplicitamente tableView come proprietà della sua classe UIViewController e renderlo un IBOutlet. – bpapa

+0

Kendall/bpapa - Grazie per il tuo aiuto. Usando le tue risposte combinate, sono stato in grado di risolvere il mio problema. Una cosa sull'ultimo commento di bpapa: dovevo creare una proprietà chiamata "tableView" nella mia classe UIViewController; tuttavia, sembrava funzionare anche se non lo avessi dichiarato come IBOutlet o collegato l'IBOutlet alla tabellaView stessa. Non ho ancora capito perché funziona ... :-) –

0

Sfortunatamente, la creazione di un UITableView in Interface Builder (IB) è stata molto problematica per me. Ho avuto gli stessi problemi di uno sviluppatore principiante e, dopo molte frustrazioni, ho finito per abbandonare IB per UITableViews.

La soluzione migliore per me era implementare UITableViewController (e UINavigationController che si utilizza come intestazione) a livello di programmazione. Una volta capito l'intero paradigma Model-View-Controller, è in realtà abbastanza semplice.

Alcune buone risorse per trattare con loro a livello di codice in cui si trovano la documentazione di Apple con questi nomi:

"Table View Guida alla programmazione per iPhone OS"
"Guida alla programmazione View Controller per iPhone OS"

+1

Guarda la risposta di Kendall e il mio commento. Dal 3.0, Apple ha ripulito i documenti per spiegarlo meglio. Utilizzando questo approccio è ancora possibile fare visualizzazioni di tabelle in Interface Builder. – bpapa

+0

Buono a sapersi, grazie. –

Problemi correlati