2010-06-01 4 views
1

J'utilise Three20 pour créer une table avec plusieurs champs de texte pour l'enregistrement de l'utilisateur. J'ai trouvé deux méthodes possibles en utilisant Three20. La première utilise la méthode tableDidLoadModel de TTSectionedDataSource pour ajouter manuellement des composants d'interface utilisateur et la seconde ajoute des éléments personnalisés qui contiennent des composants d'interface utilisateur préformatés. La deuxième option semble beaucoup plus complexe et j'ai du mal à accéder aux différents champs. Donc, si un champ est un champ de texte pour le nom d'utilisateur, j'ai besoin d'accéder au champ pour soumettre le nom d'utilisateur et il ne semble pas y avoir une réponse facile. La première option me donne beaucoup de flexibilité, mais je n'arrive pas à déterminer comment régler les hauteurs de rangée individuelles. Une ligne peut avoir une étiquette au-dessus d'un champ de texte, une autre peut avoir une image, etc. Existe-t-il une méthode qui peut être utilisée dans TTSectionedDataSource pour me permettre de définir la hauteur de chaque ligne? Jusqu'à présent, j'utilise la méthode un et crée UIViews pour contenir un champ d'étiquette et un champ de texte. J'ai essayé de changer le cadre de l'uiview avant qu'il ne soit ajouté au tableau d'éléments, mais il n'a aucun effet.Three20 TTSectionedDataSource hauteur de la ligne

Des idées?

Répondre

1

Je crois que je l'ai peut-être compris. Je ne sais pas si c'est la bonne solution, mais cela semble fonctionner. Tout d'abord, dans ma classe d'objets personnalisés, je transmets la source de données en tant que délégué. Maintenant que le délégué fait partie de l'élément, je peux le transmettre à mon champ de texte en tant que délégué. Tant que j'intègre UITextFieldDelegate dans ma classe de source de données, il répondra en tant que délégué à mon champ de texte. Donc, cela obtient le contenu de le champ de texte.

Si je veux changer le contenu dans un champ de texte de la source de données, je peux tirer parti de la méthode:

- (void)tableView:(UITableView*)tableView cell:(UITableViewCell*)cell willAppearAtIndexPath:(NSIndexPath*)indexPath 

Je peux vérifier la ligne à l'aide indexPath.row puis tapez la cellule comme la coutume correspondante classe de cellules. De là, je peux accéder à toutes les méthodes publiques dans ma classe cellulaire. J'ai donc créé un qui renvoie une référence au champ de texte. Je peux donc dire:

[[(MyCustomTextFieldCell *)cell theTextField] setText:@"hello world"]; 

L'étape suivante consiste à attribuer à un Ivar local, puis je suppose que je devrais être en mesure d'y accéder à tout moment. La raison principale pour laquelle je veux pouvoir modifier le contenu du champ de texte est que dans certains cas en cliquant sur le champ de texte, un sélecteur apparaîtra et les résultats du sélecteur seront formatés et insérés dans le champ de texte.

Veuillez me faire savoir si mon approche est trop compliquée. Je vais peut-être créer un échantillon et le poster pour que tout le monde puisse se déchirer et me dire que je suis un crétin et qu'il y a un meilleur moyen.

merci, howie