2012-01-06 2 views
5

Quando creo una vista tabella statica e la metto in un normale controller di visualizzazione, viene visualizzato un errore che dice che le viste statiche delle tabelle devono essere presenti in UITableViewController.iOS Come aggiungere STATIC UITableView e un'altra vista allo stesso controller di visualizzazione

Quello che voglio è una vista sull'iPad che ha una vista tabella statica che occupa gran parte dello schermo, ma una vista UIV standard sotto di essa che rimane sempre visibile e ha un paio di etichette che aggiorno in base al contenuto in la vista del tavolo.

C'è un modo per utilizzare un UITableViewController e avere il TableView non essere a schermo intero in modo che io possa aggiungere una sottoview ad esso in uno Storyboard?

Se no, può essere fatto nel codice?

Qualsiasi consiglio sarebbe apprezzato!

risposta

0

La vera risposta è creare un controller contenitore personalizzato.

Ad esempio, è possibile avere una vista tabella statica all'interno di un controller di navigazione. Quindi, è necessario creare una classe contenitore, come un controller di navigazione o qualunque sia la tua, e aggiungere il controller di visualizzazione tabella statica a quello.

1

È possibile ottenere lo stesso effetto utilizzando UITableViewController e uno statico UITableView. Crea la vista desiderata nella parte inferiore della tabella e imposta la proprietà tableFooterView su UITableView per quella vista. Questo può essere fatto trascinando un oggetto UIView fuori dalla libreria e aggiungendolo nella parte inferiore della vista tabella (noterai l'evidenziazione dell'area inferiore in blu per sapere che lo stai facendo correttamente). Potrebbe essere necessario regolare gli inserti di contenuto per farlo visualizzare come desideri.

+0

Il piè di pagina è visibile solo quando si è in fondo al tavolo, corretto? Ho bisogno che questa vista sia visibile in ogni momento. – lnafziger

+0

Ottima soluzione! È possibile aggiungere un normale UIView prima o dopo una sezione di visualizzazione tabella che è sostanzialmente la stessa di integrarla viceversa e in realtà funziona. –

1

La cella statica TableViews deve essere di tipo UITableViewController, ma è possibile ottenere lo stesso effetto utilizzando un ViewController con TableView (o 2) e prendersi cura del metodo cellForRowAtIndexPath per la TV che si desidera sia "Cell Static" . Passa semplicemente IndexPath.section e .row e costruisci la cella nel modo che preferisci. Più codifica sicura, ma ottieni lo stesso effetto e con più flessibilità se non vuoi farlo in modo statico.

+0

Sì, purtroppo è un sacco di file quindi sto cercando di trovare un modo migliore! – lnafziger

2

io non sono sicuro se funziona, ma si consiglia di provare questo approccio troppo:

  1. Creare un UIViewController, per esempio BaseViewController (sia una classe che in Storyboard)
  2. Creare un UITableViewController ad es. MyStaticTableViewController (solo in Storyboard e aggiungere un identificatore ad esso)
  3. In Storyboard, aggiungere un'istanza di UIView con dimensioni appropriate al proprio BaseViewcontroller, ad es. myStaticTableView.
  4. A livello di codice, aggiungere la vista di MyStaticTableViewController a myStaticTableView.
6

Ciò di cui si ha bisogno è un normale UITableViewController (in modo da ottenere tutto il comportamento della cella statica) e quindi la vista come vista secondaria della vista tabella, ma gestita in modo tale che rimanga sempre nella parte inferiore dello schermo. Apple lo ha dimostrato come WWDC. Ecco cosa faccio (nel mio esempio, ho un UIDatePicker che voglio sempre ancorato in fondo):

In viewDidLoad, crea la tua vista e aggiungila come vista secondaria della vista tabella. Posizionalo nella parte inferiore della visualizzazione tabella.

[self.tableView addSubview:self.datePicker]; 
[self updateDatePickerBounds]; 

Implementare scrollViewDidScroll in modo che è possibile forzare l'immagine per la parte inferiore dello schermo mai tempo i rotoli vista tabella:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    // Keep the date picker floating above the table view, anchored to the bottom of the view 
    [self updateDatePickerBounds]; 
} 

e quindi implementare una funzione che posiziona il vostro avviso correttamente:

- (void) updateDatePickerBounds 
{ 
    // Keep the date picker floating above the table view, anchored at the bottom 
    CGRect tableBounds = self.tableView.bounds; 
    CGRect pickerFrame = self.datePicker.frame; 
    pickerFrame = CGRectMake(tableBounds.origin.x, 
          tableBounds.origin.y + CGRectGetHeight(tableBounds) - CGRectGetHeight(pickerFrame), 
          tableBounds.size.width, 
          pickerFrame.size.height); 
    self.datePicker.frame = pickerFrame; 
} 

Infine, se non si desidera che la vista tabella vada sotto la vista inferiore, è sufficiente impostare la vista tabella contentInset in modo che corrisponda alla otto del tuo punto di vista.

Ho anche chiamato il mio metodo updateDatePickerBounds da viewWillAppear. Ho dimenticato perché dovevo farlo.

+2

Sì, questo è quello di cui sto parlando - un UITableViewController configurato con celle statiche. Puoi spostare una vista sopra la vista del tavolo usando la tecnica che ho descritto. L'ho fatto diverse volte. –

+0

AGGIORNAMENTO: In realtà, il posto migliore per chiamare updateDatePickerBounds è in viewDidLayoutSubviews. Quindi non è necessario eseguire l'override di scrollViewDidScroll. viewDidLayoutSubviews viene anche chiamato durante la rotazione del dispositivo, quindi le cose verranno aggiornate anche in quel caso. –