2009-06-07 16 views
7

Ich habe ein UITableView mit mehreren benutzerdefinierten UITableViewCells, die einige UITextFields und UISwitch (basierend auf Settings.app) eingerichtet haben. Meine Frage ist, wenn ein Benutzer auf die Schaltfläche "Speichern" in der Navigationsleiste klickt, was ist der beste Weg, um auf diese Textfelder zuzugreifen und die Steuerelemente zu wechseln, um ihre Werte zu speichern?iPhone Table View: Zugriff auf das Textfeld von benutzerdefinierten TableViewCell

Antwort

15

Mein Vorschlag ist, benutzerdefinierte UITableViewCell s nicht zu verwenden. Ich habe es auf deine Art gemacht, aber es gibt einen viel besseren Weg. Verwenden Sie die accessoryView-Eigenschaft der UITableViewCell, der Sie eine beliebige Ansicht zuweisen können, z. B. UITextField oder UISwitch. Es zeigt sich genau wie in der Anwendung Einstellungen.

Dann, wenn Sie darauf zugreifen müssen, verwenden Sie nur

NSString *text = ((UITextField *)cell.accessoryView).text; 

Allerdings müssen Sie über das Einrichten von Zellen und den Zugriff auf ihre Werte vorsichtig sein. Wenn eine Zelle außerhalb des Bildschirms angezeigt wird, wird sie entfernt und Sie können nicht auf das Textfeld zugreifen. Was Sie tun möchten, wenn Ihr Handy ist das Einrichten:

cell.accessoryView = nil; //Make sure any old accessory view isn't there. 
if (/*cell needs text field*/) { 
    UITextField *textField = [[[UITextField alloc] initWithFrame:frame] autorelease]; 
    textField.text = savedValue; 
    cell.accessoryView = textField; 
    [textField addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventValueChanged]; 
} 

... 

- (void) textChanged:(UITextField *)source { 
    self.savedValue = source.text; 
} 
+0

Was passiert, wenn ich mehr als eine Zelle mit einem Textfeld habe (wie die Kontaktansicht in der Kontakte-App)? Sollte ich für jede der Ansichten eine andere Methode hinzufügen? – Rodrigo

+0

Gefunden hier http://stackoverflow.com/questions/3572377/iphone-how-to-read-the-data-in-uitableview/3572595#3572595, dass Sie die Tags für Textfelder ändern können, so kann ich eine Methode haben und schalte es ein. – Rodrigo

+4

Ich benutze UIControlEventEditingDidEnd. UIControlEventValueChanged scheint nicht aufgerufen zu werden:? – whatever0010011

0

Wenn Sie nicht Ed Vorschlag folgen, Sie sind wahrscheinlich am besten halten Sie Ihre Textansicht in der benutzerdefinierten Zelle und das Hinzufügen einer Eigenschaft, um die Ansicht zu gelangen.

0

Sie können auch festlegen, dass Ihre benutzerdefinierten Zellen einen Verweis auf Ihren übergeordneten Ansichtscontroller behalten und Benachrichtigungen senden, wenn der Benutzer Werte darin aktualisiert. Kopieren Sie im Prinzip das von vielen Bibliotheksobjekten in UIKit verwendete Delegatenmuster.

Verwandte Themen