2009-08-04 10 views
0

Ich habe UITableView mit benutzerdefinierten Zellen, die einen Player darstellen. Wenn ich einen neuen Player hinzufüge, wird ein neues Datenelement hinzugefügt und [UITableView reloadData] wird aufgerufen. Ein Teil der Zelle ist eine UITextView, die den Spielernamen enthält. Wie bringe ich die Tastatur dazu?Tastatur für Zelle in UITableView aufrufen?

Ich könnte nutzen Sie FirstFirstResponder, wenn ich Zugriff auf die UITextView in der Zelle hatte, aber es wurde noch nicht tatsächlich erstellt. Da reloadData die Erstellung der neuen Zelle noch nicht durchführt.

Jemand anderes muss dies vorher gelöst haben. Irgendwelche Tipps, wie man diese Arbeit macht, würde sehr geschätzt werden.

Mein Code-Schnipsel:

-(IBAction)addPlayerPressed:(id)sender { 
Player *newPlayer = [Player alloc]; 
[players addObject:newPlayer]; 
[table reloadData]; 

// Scroll to bottom showing the new player location 
NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:([players count] - 1) inSection:0]; 
[table scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 

// cell is always nil :(
PlayerTableCell *cell = (PlayerTableCell *)[table cellForRowAtIndexPath:scrollIndexPath] 
[cell.nameField setfirstResponder]; 
} 

Antwort

0

Can u die Textfelder die UITableViewController anstelle der Tabellenzelle übertragen machen?

0

In Ihrer PlayerTableCell-Klasse könnten Sie einen Code in die -initWithStyle:reuseIdentifier:-Methode schreiben, die überprüft, ob sie zum Ersthelfer werden soll, und falls ja,. Sie haben wahrscheinlich eine PlayerController-Klasse oder etwas ähnliches; Sie könnten eine Delegate-Methode für die benutzerdefinierte Tabellenansichtszelle oder etwas Ähnliches erstellen.

2

Paar Dinge:

Du bist wahrscheinlich besser dran UITextField statt UITextView verwenden. UITextField ist ideal für einzeilige Einträge, wie Sie es hier beschreiben.

Wie für Ihre Lösung, hier ist, was ich empfehlen würde. (Nahm auch die Freiheit der Reinigung Ihrer Speicherverwaltung)

eine BOOL-Eigenschaft auf ihren Spieler Klasse hinzufügen genannt, sagen wir, ‚needsKeyboardDisplay‘, dann setzen Sie ihn auf ja, nachdem Sie eine neue Instanz erstellen.

-(IBAction)addPlayerPressed:(id)sender { 
Player *newPlayer = [[Player alloc] init]; 


newPlayer.needsKeyboardDisplay = YES; 


[players addObject:newPlayer]; 

[newPlayer release]; 

[table reloadData]; 

// Scroll to bottom showing the new player location 

NSIndexPath *scrollIndexPath = [NSIndexPath indexPathForRow:([players count] - 1) inSection:0]; 

[table scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 


} 

Dann in cellForRowAtIndexPath, legen Sie diese, nachdem Sie sonst gesetzt haben Ihre Zelle nach oben:

Player *playerForCell = [players objectAtIndex:indexPath.row]; 

if (playerForCell.needsKeyboardDisplay) 
{ 
[nameField becomeFirstResponder]; 
playerForCell.needsKeyboardDisplay = NO; 
} 

Alles, was gesagt, von einem User Experience Sicht die (etwas) Standard iPhone Erfahrung für die Bearbeitung Details in einer langen Liste von Elementen wie diesem ist es in einer anderen Ansicht zu tun. Es liegt natürlich an dir.

+0

Funktioniert jetzt perfekt! Danke für die Hilfe!!! –

+0

Ich nehme das zurück, scheint diese Reparatur das UITableView ernsthaft zu brechen. Nach dem Hinzufügen und Entfernen von ein paar Zeilen wird das Display sehr verwirrt. Meine Datensätze und die tatsächlichen Zellen, die als gerendert gemeldet werden, erscheinen korrekt, aber das Display selbst zeigt doppelte Einträge. Durch Kommentieren des Codes, der die Tastatur anzeigt, wird die normale Funktionalität der App wiederhergestellt. :( –

Verwandte Themen