2009-11-21 17 views
17

Ho creato una vista tabella in un'app per iPhone utilizzando Interface Builder (IB). Il mio stile di tabella è impostato su Raggruppato e viene visualizzato in IB. Tuttavia, ogni volta che costruisco ed eseguo, si presenta come uno stile semplice nel simulatore.Impostazione stile raggruppata che non ha effetto da IB, UITableView

Ho un'altra vista impostata su Raggruppato e non si verifica questo problema. Qualcuno ha incontrato prima questo problema?

Il resto della vista non viene creato a livello di codice, quindi mi piacerebbe evitare di farlo per questa vista. Ci deve essere qualcosa che mi manca.

L'unico metodo tableView che sto facendo molto di qualche cosa in è il metodo del gestore cella dove sto incorporando una casella di testo in selezionare i campi:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 
} 

if (indexPath.section == 0) { 
    if (indexPath.row == 0) { 
     cell.textLabel.text = @"Title"; 

     UITextField *listTitleTextField = [ [ UITextField alloc ] initWithFrame: CGRectMake(150, 10, 145, 38) ]; 
     listTitleTextField.adjustsFontSizeToFitWidth = YES; 
     listTitleTextField.textColor = [UIColor blackColor]; 
     listTitleTextField.font = [UIFont systemFontOfSize:17.0]; 
     listTitleTextField.placeholder = @"Your Title"; 
     listTitleTextField.backgroundColor = [UIColor whiteColor]; 
     listTitleTextField.autocorrectionType = UITextAutocorrectionTypeNo;  // no auto correction support 
     listTitleTextField.autocapitalizationType = UITextAutocapitalizationTypeNone; // no auto capitalization support 
     listTitleTextField.textAlignment = UITextAlignmentRight; 
     listTitleTextField.keyboardType = UIKeyboardTypeDefault; // use the default type input method (entire keyboard) 
     listTitleTextField.returnKeyType = UIReturnKeyDone; 
     listTitleTextField.tag = 0; 
     listTitleTextField.delegate = self; 

     listTitleTextField.clearButtonMode = UITextFieldViewModeUnlessEditing; // no clear 'x' button to the right 
     if (self.wishList.listTitle == nil || [self.wishList.listTitle length] == 0) { 
      listTitleTextField.text = @""; 
     } 
     else { 
      listTitleTextField.text = self.wishList.listTitle; 
     } 
     [listTitleTextField setEnabled: YES ]; 
     [cell addSubview: listTitleTextField ]; 
     [listTitleTextField release]; 
    } 
    else if (indexPath.row == 1) { 
     cell.detailTextLabel.text = @"Pick an Icon"; 
     cell.textLabel.text = @"List Icon"; 
    } 
} 
else { 
    cell.textLabel.text = @"Add Wish"; 
} 

return cell; 

}

+0

Inserisci il tuo codice? –

+0

Non è proprio un codice programmatico da pubblicare il problema, l'impostazione di Style su "grouped" in IB, quindi solo l'esecuzione regolare dei metodi I/F tableview per impostare i nomi delle sezioni e modificare la cella della tabella secondo necessità per visualizzare i valori. –

+0

Stai usando questo in combinazione con un UITabBarController? – JamesSugrue

risposta

8

Ancora non sono sicuro del motivo per cui l'impostazione di stile "raggruppata" non ha effetto da Interface Builder. Tuttavia, è possibile impostarlo manualmente prima che la vista venga creata qui:

- (id)initWithStyle:(UITableViewStyle)style { 
    // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. 
    style = UITableViewStyleGrouped; 
    if (self = [super initWithStyle:style]) { 
    } 
    return self; 
} 
+0

Questa versione di codice funziona ma la risposta di Joe sopra funziona solo per la versione IB. – earnshavian

+0

Stesso codice, ho implementato ma non funziona in iPhone 5, hai qualche suggerimento – Raj

0

fa il rispondono vista tabella agli eventi e vengono popolati con i dati come ti aspetteresti? - Sembra che le prese non siano collegate correttamente a me. Vorrei ricontrollare l'origine dati e delegare le connessioni da tableview al controller. Può valere la pena eliminare la tableview da IB e riaggiungerla e ricollegarla. Ho visto IB agire un po 'pignolo nel caso strano.

+0

Eliminato e creato una nuova vista tabella. Quindi allegare l'origine dati e delegare al proprietario del file. Inoltre ha allegato la vista nel proprietario del file alla tabella. Risolvi lo stesso problema. –

13

Avevamo questo e ci ha bloccato per circa un'ora. Alla fine abbiamo scoperto che non eravamo riusciti a impostare la proprietà NIB Name del controller di visualizzazione all'interno del controller di navigazione (all'interno del controller della barra delle linguette, nel nostro XIB principale!). Senza quel set, tutte le modifiche apportate al file XIB della nostra vista tabella sono state completamente ignorate. Eppure il codice funzionava bene, e c'era ben poco da indicarci il nostro errore.

Scommetto che qualcosa di simile sta succedendo nel tuo caso. Assicurati che il tuo XIB (dove imposti lo stile della tabella) sia effettivamente utilizzato.

+0

Posso confermare che funziona. Imposta il nome NIB sul nome del tuo file xib senza l'estensione .xib. Questo dovrebbe essere contrassegnato come la risposta per una soluzione solo IB. – earnshavian

9

Qual è la classe base del controller? Ho avuto lo stesso problema, fino a quando ho acceso il mio controller dalla sottoclasse di uno UITableViewController a uno standard UIViewController. Sembrerebbe che tu stia utilizzando uno , che abbia il proprio UITableView integrato e ignori quello specificato in IB.

+0

Questo ha funzionato nel mio caso! Grazie! –

+0

Mi ha aiutato anche questo - grazie! –

+0

OMG grazie mille. –

2

È necessario specificare il nome del pennino quando si crea la classe altrimenti non cercherà il pennino predefinito con lo stesso nome della classe. Per qualche motivo, Apple ha deciso di includere la propria vista tabella come predefinita.

Per esempio, se il nome di classe è "Impostazioni":

settingsController = [[Settings alloc] initWithNibName:@"Settings" bundle: nil];

4

Quando l'inizializzazione la vista solo fare il seguente:

CustomTableViewController *viewController = [[CustomTableViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
[self.navigationController pushViewController:viewController animated:YES]; 
[viewController release]; 

Piuttosto che init. Questo lo risolve per me.

Problemi correlati