2009-02-27 3 views
0

Ich lade eine UITableViewCell, die zwei markierte Etiketten enthält. Der Benutzer wird die aktuelle Ansicht mit dem folgenden Code verlassen und zu einer anderen Ansicht wechseln. Ein Name-Wert wird dort festgelegt und der Benutzer kehrt zu dieser Ansicht zurück (Code unten). Ich weise den Namen, den sie in der anderen Ansicht festgelegt haben, dem Namensetikett zu. Das funktioniert, aber ich bekomme ein neues Label auf meinen anderen Labels. Es scheint, ich behalte zwei Versionen dieser Zelle. Nicht ganz sicher. Irgendwelche Vorschläge, was diese Art von Verhalten verursachen könnte?Laden von Zellen über die Spitze und referenzierende Komponenten in ihnen

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = nil; 
if(indexPath.section == 0) 
{ 
    cell = [tableView dequeueReusableCellWithIdentifier:@"CellNameIdentifier"]; 
    if (cell == nil) { 
     [[NSBundle mainBundle] loadNibNamed:@"CellentName" owner:self options:nil]; 
     cell = cellName; 
     //self.cellName = nil; 
    } 
} 
return cell; 
} 
- (void)viewDidAppear:(BOOL)animated { 
UILabel *startdate = (UILabel *)[cellName viewWithTag:1]; 
startdate.text = aName; 
[super viewDidAppear:animated]; 
} 

Antwort

1

Aus dem Blick dieses Codes ist es weniger wahrscheinlich, dass Sie „ein neues Label falsch ausgerichtet auf meinem anderen Labels“ und mehr wie die Zeichnung werden immer versagt am Anfang der Dinge richtig neu zu zeichnen. Damit das funktioniert, können Sie versuchen, [tableView reloadData] aufzurufen oder einen Beobachter zu verwenden, aber ich denke, es gibt einen besseren Weg.

Sie sollten in der Lage sein, das Objekt in Ihre andere Ansicht zu übergeben, das Objekt (anstelle der Beschriftung) zu ändern und die Daten auf diese Weise zu verschieben. Mit anderen Worten, in der Tabellenansicht werden die Objekte geladen, und innerhalb von cellForRowAtIndexPath werden die Zellen geladen und die Beschriftungsnamen mithilfe der Objektdaten festgelegt. Drücken Sie die zweite Ansicht und übergeben Sie das Objekt als Eigenschaft. Manipulieren Sie diese Eigenschaft auf diesem Bildschirm, und wenn Sie die Ansicht öffnen, gibt es keine spezielle Logik. Die erste Tabellenansicht zeigt wieder an, was in dem Objekt, das Sie manipuliert haben, gespeichert ist.

+0

Ich folge nicht. EinName kommt von meiner Klasse appdelegate. Es ist also immer als Instanz verfügbar. Ich sollte in diesem Fall keine Objektdaten an die zweite Ansicht übergeben müssen, oder? Ich denke, dass in cellForRowAtIndexPath eine Änderung erforderlich ist, "zeigt an, was in diesem Objekt gespeichert ist", um richtig zu funktionieren? – 4thSpace

+0

Werfen Sie einen Blick auf das Apple-Beispielprojekt für SQLiteBooks, um ein detailliertes Codebeispiel zum Übergeben und Bearbeiten von Objekten als Eigenschaften anzuzeigen. – slf

Verwandte Themen