2009-11-21 11 views
17

Ich habe eine Tabellenansicht in einer iPhone App mit dem Interface Builder (IB) erstellt. Mein Tischstil ist auf gruppiert eingestellt und wird in IB angezeigt. Jedes Mal, wenn ich baue und laufe, wird es im Simulator als einfacher Stil angezeigt.Gruppierte Stileinstellung wird nicht von IB übernommen, UITableView

Ich habe eine andere Ansicht auf gruppiert und habe dieses Problem nicht. Hat jemand schon einmal auf dieses Problem gestoßen?

Der Rest der Ansicht wird nicht programmgesteuert erstellt, daher möchte ich das für diese Ansicht vermeiden. Es muss etwas geben, was mir fehlt.

Die einzige Methode Tableview Ich bin in so gut wie nichts tun, ist die Zelle Handler-Methode, wo ich ein Textfeld in ausgewählte Felder enthalten:

- (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

Geben Sie Ihren Code ein? –

+0

Nicht wirklich irgendein programmatischer Code zum Posten ist das Problem, Style auf "gruppiert" in IB setzend, dann nur reguläre tableview I/F Methoden verwendend, um Abschnittsnamen einzustellen und die Tabellenzelle zu ändern, um Werte anzuzeigen. –

+0

Verwenden Sie dies in Verbindung mit einem UITabBarController? – JamesSugrue

Antwort

8

Immer noch nicht sicher, warum die "gruppierte" Stileinstellung nicht vom Interface Builder übernommen wird. Sie können es jedoch manuell festlegen, bevor die Ansicht hier erstellt wird:

- (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

Diese Codeversion funktioniert, aber Joes obige Antwort funktioniert nur für die IB-Version. – earnshavian

+0

Derselbe Code, ich habe implementiert, aber nicht funktioniert in iPhone 5, Haben Sie einen Vorschlag – Raj

0

Ist der Tabellen-Ansicht respond zu Ereignissen und werden mit Daten gefüllt, wie Sie es erwarten würden? - Es hört sich an, als wären die Steckdosen nicht richtig mit mir verbunden. Ich würde die Datenquelle überprüfen und Verbindungen von der Tabellenansicht zum Controller delegieren. Vielleicht lohnt es sich, die Tabellenansicht von IB zu löschen und sie erneut hinzuzufügen und erneut zu verbinden. Ich habe gesehen, dass IB in dem einen oder anderen Fall ein wenig nervig ist.

+0

Gelöscht und erstellt eine neue Tabellenansicht. Fügen Sie dann die Datenquelle und den Delegaten dem Dateibesitzer hinzu. Außerdem wurde die Ansicht im Dateibesitzer an die Tabelle angehängt. Problem ist das gleiche. –

13

Wir hatten dies und es stoppte uns für etwa eine Stunde. Schließlich haben wir festgestellt, dass es uns nicht gelungen ist, die Eigenschaft NIB-Name des View-Controllers im Navigations-Controller (innerhalb des Tab-Bar-Controllers, in unserem Haupt-XIB!) Zu setzen. Ohne diesen Satz wurden alle Änderungen, die wir an der XIB-Datei unserer Tabellenansicht vorgenommen haben, vollständig ignoriert. Aber der Code funktionierte ansonsten gut, und es gab sehr wenig, um uns auf unseren Fehler hinzuweisen.

Ich wette, dass etwas ähnliches in Ihrem Fall passiert. Stellen Sie sicher, dass Ihr XIB (wo Sie den Tabellenstil festlegen) tatsächlich verwendet wird.

+0

Ich kann bestätigen, dass dies funktioniert. Setzen Sie den NIB-Namen auf den Namen Ihrer XIB-Datei ohne die Erweiterung .xib. Dies sollte als Antwort für eine IB-Lösung markiert werden. – earnshavian

9

Was ist die Basisklasse Ihres Controllers? Ich hatte das gleiche Problem, bis ich meinen Controller von Unterklassen UITableViewController auf nur einen Standard UIViewController wechselte. Es scheint, wenn Sie eine UITableViewController verwenden, hat es seine eigene eingebaute UITableView und ignoriert die, die Sie in IB angeben.

+0

Das hat in meinem Fall funktioniert! Vielen Dank! –

+0

Hat mir auch geholfen - danke! –

+0

OMG vielen Dank. –

2

Sie müssen den Nib-Namen angeben, wenn Sie die Klasse erstellen, oder andernfalls wird nicht nach der Standardnib gesucht, die mit Ihrer Klasse identisch ist. Aus irgendeinem Grund hat Apple beschlossen, eine eigene Tabellenansicht als Standard zu verwenden.

Zum Beispiel, wenn Ihr Klassenname "Einstellungen" ist:

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

4

Wenn die Ansicht Initialisierung nur Folgendes tun:

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

Anstatt nur init. Das löst es für mich.

Verwandte Themen