Je suis capable de concevoir des UITableViewCells personnalisées et de les charger très bien en utilisant la technique décrite dans le fil de discussion trouvé à http://forums.macrumors.com/showthread.php?t=545061 . Cependant, l'utilisation de cette méthode ne vous permet plus d'initier la cellule avec un reuseIdentifier, ce qui signifie que vous devez créer de nouvelles instances entières de chaque cellule à chaque appel. Quelqu'un a-t-il trouvé un bon moyen de toujours mettre en cache des types de cellules particuliers pour les réutiliser, tout en étant capable de les concevoir dans Interface Builder?
ios
iphone
uitableview
cocoa-touch
interface-builder
Greg Martin
la source
la source
return NSStringFromClass([self class]);
En fait, puisque vous créez la cellule dans Interface Builder, définissez simplement l'identifiant de réutilisation ici:
Ou si vous exécutez Xcode 4, vérifiez l'onglet Inspecteur d'attributs:
(Modifier: une fois que votre XIB est généré par XCode, il contient un UIView vide, mais nous avons besoin d'un UITableViewCell; vous devez donc supprimer manuellement l'UIView et insérer une cellule de vue de tableau. Bien sûr, IB n'affichera aucun paramètre UITableViewCell pour un UIView.)
la source
Maintenant, dans iOS 5, il existe une méthode UITableView appropriée pour cela:
la source
Je ne me souviens pas où j'ai trouvé ce code à l'origine, mais cela a très bien fonctionné pour moi jusqu'à présent.
Exemple de configuration d'Interface Builder ...
la source
Regardez la réponse que j'ai donnée à cette question:
Est-il possible de concevoir des sous-classes NSCell dans Interface Builder?
Il n'est pas seulement possible de concevoir un UITableViewCell dans IB, c'est souhaitable car sinon, tout le câblage manuel et le placement de plusieurs éléments sont très fastidieux. La performance est bonne tant que vous prenez soin de rendre tous les éléments opaques lorsque cela est possible. Le reuseID est défini dans IB pour les propriétés de UITableViewCell, puis vous utilisez l'ID de réutilisation correspondant dans le code lors de la tentative de retrait de la file d'attente.
J'ai également entendu certains des présentateurs de la WWDC l'année dernière dire que vous ne devriez pas créer de cellules de vue de tableau dans IB, mais c'est un tas de superpositions.
la source
À partir d'iOS vers 4.0, il y a des instructions spécifiques dans la documentation iOS qui rendent ce travail ultra-rapide:
http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html#//apple_ref/doc/uid/TP40007451-CH7
Faites défiler jusqu'à l'endroit où il est question de sous-classer UITableViewCell.
la source
Voici une autre option:
la source
UITableViewCell
afin de définir une valeur unique pourreuseIdentifer
. Je pense que c'est ce que l'op original recherchait réellement.Je crée mes cellules de vue personnalisées de la même manière - sauf que je connecte la cellule via un IBOutlet.
L'
[nib objectAt...]
approche est susceptible de changer les positions des éléments dans le tableau.L'
UIViewController
approche est bonne - il suffit de l'essayer et cela fonctionne assez bien.MAIS...
Dans tous les cas, le
initWithStyle
constructeur n'est PAS appelé, donc aucune initialisation par défaut n'est effectuée.J'ai lu divers endroits sur l'utilisation de
initWithCoder
ouawakeFromNib
, mais aucune preuve concluante que l'un ou l'autre est le bon moyen.En dehors d'appeler explicitement une méthode d'initialisation dans la
cellForRowAtIndexPath
méthode, je n'ai pas encore trouvé de réponse à cela.la source
Il y a quelque temps, j'ai trouvé un excellent article de blog sur ce sujet sur blog.atebits.com , et j'ai depuis commencé à utiliser la classe Loren Brichter ABTableViewCell pour faire toutes mes UITableViewCells.
Vous vous retrouvez avec un simple conteneur UIView pour mettre tous vos widgets, et le défilement est ultra rapide.
J'espère que c'est utile.
la source
Cette technique fonctionne également et ne nécessite pas un ivar funky dans votre contrôleur de vue pour la gestion de la mémoire. Ici, la cellule de vue de tableau personnalisée se trouve dans un xib nommé "CustomCell.xib".
la source
La méthode Louis a fonctionné pour moi. C'est le code que j'utilise pour créer l'UITableViewCell à partir de la pointe:
la source
la source
La solution gustavogb ne fonctionne pas pour moi, ce que j'ai essayé est:
Cela semble fonctionner. Le blogTableViewCell est l'IBOutlet de la cellule et ChainesController est le propriétaire du fichier.
la source
De la documentation UITableView concernant
dequeueWithReuseIdentifier
: "Une chaîne identifiant l'objet de cellule à réutiliser. Par défaut, l'identificateur d'une cellule réutilisable est son nom de classe, mais vous pouvez le changer en n'importe quelle valeur arbitraire."Remplacer -reuseIdentifer vous-même est risqué. Que se passe-t-il si vous avez deux sous-classes de votre sous-classe de cellules et que vous utilisez les deux dans une seule vue de tableau? S'ils envoient l'appel d'identifiant de réutilisation à super, vous retirerez de la file d'attente une cellule du mauvais type .............. Je pense que vous devez remplacer la méthode reuseIdentifier, mais lui faire renvoyer un identifiant supplanté chaîne. Ou, si aucun n'a été spécifié, demandez-lui de renvoyer la classe sous forme de chaîne.
la source
Pour ce que ça vaut, j'ai demandé à un ingénieur iPhone à ce sujet lors de l'un des iPhone Tech Talks. Sa réponse a été: "Oui, il est possible d'utiliser IB pour créer des cellules. Mais ne le faites pas. S'il vous plaît, ne le faites pas."
la source
J'ai suivi les instructions d'Apple liées par Ben Mosher (merci!) Mais j'ai constaté qu'Apple avait omis un point important. L'objet qu'ils conçoivent dans IB n'est qu'un UITableViewCell, tout comme la variable qu'ils chargent à partir de celui-ci. Mais si vous le configurez en tant que sous-classe personnalisée de UITableViewCell et que vous écrivez les fichiers de code pour la sous-classe, vous pouvez écrire des déclarations IBOutlet et des méthodes IBAction dans le code et les connecter à vos éléments personnalisés dans IB. Ensuite, il n'est pas nécessaire d'utiliser des balises de vue pour accéder à ces éléments et vous pouvez créer n'importe quel type de cellule folle que vous voulez. C'est le paradis de Cocoa Touch.
la source