10
votes

UISWITCH INTÉRIEUR INTÉRIEUR UTILITEURVIEUVER NON DISPONIBLE

J'ai un uiswitch code> à l'intérieur d'un utableviewcell code> (la sous-classe dont j'appelle rootlabeledswitchtablecell code>).

La cellule contient un uilabel code> et uiswitch code> côte l'un à côté de l'autre. p>

J'ai un @property code> appelé keyChaninswitch code> que pointe vers l'interrupteur à l'intérieur de cette cellule personnalisée: p> xxx pré>

dans ma table Voir délégué, j'ai ajouté un sélecteur appelé si l'état du commutateur est retourné: p> xxx pré>

de sorte que ce sélecteur fonctionne correctement: p> xxx pré>

Cependant, je ne peux pas utiliser le uiswitch code> de l'instance SETON: Animated: Code> Méthode pour initialiser son état initial: P>

[Session started at 2009-08-24 07:04:56 -0700.]
2009-08-24 07:04:58.489 MyApp[29868:20b] keychain switch is: nil
2009-08-24 07:05:00.641 MyApp[29868:20b] Switched keychain option from 1 to 0
2009-08-24 07:05:01.536 MyApp[29868:20b] Switched keychain option from 0 to 1
2009-08-24 07:05:02.928 MyApp[29868:20b] Switched keychain option from 1 to 0


0 commentaires

3 Réponses :


0
votes

Je pense que ce qui se passe ici, c'est que vous essayez d'invoquer l'opération lorsque la cellule est hors de vue, alors ce qui se passe est que la cellule est déchargée à ce moment-là, vous recevez une nulle pour le commutateur Keychain, une fois Il vient en vue, alors ce n'est plus nul depuis son recharge. Mais je vois que vous attribuez le commutateur comme xxx

sa référence à l'interrupteur de la cellule du tableau et que vous ne le conservez pas, cela fait donc depuis que le commutateur devient nul puis , lorsque la cellule est hors de vue, il est déchargé et Keychainswitch est en train de devenir nulle et donc votre membre de classe est également devenu nul. Vous voudrez peut-être retenir KeyChainswitch, puis lors de la reconstruction de votre table C ELL, obtenez le sélecteur de KeyChatSwitch ou quelque chose du genre. J'espère que cela aide


11 commentaires

Self.Keychainswitch = [[(RootLabeledSwitchTableCell *) Cell EtiquedSwitch] Conserver]; ne marche pas.


De plus, vous avez probablement la propriété Conservez-vous de toute façon ... que se passe-t-il lorsque vous essayez la ligne ci-dessus Tho C éruption cutanée?


De plus, toutes les cellules de la vue de tableau sont en vue lorsque j'appelle la méthode -UPDAcestate -UPDATEDATEDATEDATEAU, y compris la cellule avec l'instance KeyChatSwitch.


Je spécifie (nonatomic, conserver) dans la définition de la propriété. L'application ne se bloque pas dans les deux cas: Self.Keychainswitch est juste nul.


Le problème à laquelle je pense est toujours le déséquat des cellules, il est un peu difficile de trouver une bonne solution sans regarder plus de code, mais peut-être essayer de garder vos commutateurs (ou des valeurs de commutation) dans un tableau dans votre mode de vue et lorsque vous demandez un Cellule à recharger Vous pouvez obtenir sa valeur de là (ou définir sa vue de commutation). Étant donné que vous n'utilisez qu'un seul identifiant Dequeue, vos cellules ne conservent pas l'état de l'interrupteur, vous devrez donc la réinitialiser à chaque fois que vous rechargez des cellules de toute façon (si c'est le comportement que vous voulez)


Je suppose que je ne suis pas sûr de comprendre votre réponse, car j'utilise un identifiant de Dequeue différent pour chaque section et dans la section dans la section.


Comme indiqué ici, UribleViewCell * Cell = [TV DEQUUEREREUSABLECELLIDIdentifier: Cellentificateur]; L'identifiant de cellule est-il constant ou vous continuez à changer?


Cellentificateur est défini ici: NSString * Cellentificateur = [Nstring StringwithPlatHFormat: @ "% D:% D", [IndexPath IndexatPosition: 0], [IndexPath Indexatposition: 1]];


ok, ils sont uniques, maintenant laissez-moi vous suggérer de le faire (étant donné que vous connaissez ladimentation de la ligne, vous essayez de définir le commutateur), essayez RootLabeledswitchTablecell * Cell = [TV DEQUUEREUNABLECELLIVOIDATION: Cellentificateur]; puis réglez-le directement sur la cellule ...


Cela donne des avertissements de compilation car ce n'est pas le type correct renvoyé à partir du -DequeueAsablecellwithIdentifier: méthode.


Cast IT (rootlabeledswitchTablecell *), assurez-vous que lorsque vous faites cela que la cellule que vous accédez sera de ce type (vous pouvez les alwyas, demandez au type O FIT-IT) [CellIt IskindofClass: [Classe RootLabelecell]



70
votes

J'ai passé des siècles à tripoter avec une étiquette personnalisée avec une simple étiquette et basculez dessus avant que je puisse découvrir, je pourrais juste ajouter un uiswitch en tant que vue accessoire em>. Vous êtes probablement au courant de tout ce qui est de toute façon, et que vous voulez la cellule personnalisée pour d'autres raisons, mais au cas où je souhaitais mentionner cela!

Vous faites cela comme suit (dans la méthode de la technologie CellfroworTindexPath): P>

[(UISwitch *)cell.accessoryView setOn:YES];   // Or NO, obviously!
[(UISwitch *)cell.accessoryView addTarget:self action:@selector(mySelector)
     forControlEvents:UIControlEventValueChanged];


4 commentaires

Oui, je connais la vue accessoire. J'aimerais utiliser une cellule personnalisée dans ce cas particulier, mais merci!


[Cell Adpsubview: MySwitch]; n'est pas nécessaire. Cell.AccessoryView conserve MySwitch.


Je vous ai voté, mais un simple vote à nouveau n'a pas semblé assez "merci" assez. Merci! Parfois, je me concentre si concentrée sur le problème, j'ai oublié ce petit extras dans le cadre.


Quelle approche prendriez-vous à plusieurs cellules de table comme celle-ci pour attacher les commutateurs individuels à la bonne cible?



5
votes

Je l'ai fait il y a quelque temps. Vous devriez modifier votre sélecteur

-(void) keychainOptionSwitched:(id)sender {
UISwitch *tempSwitch = (UISwitch *)sender;
}


3 commentaires

Cela n'a pas fonctionné à ma fin. Merci de la suggestion, cependant.


N'a pas fonctionné ici non plus. J'ai eu: [OptionsViewController ToggleImage]: Sélecteur non reconnu envoyé à l'instance 0x4B305C0 '. Notez que l'appelant sans le paramètre fonctionnait bien (bien que je ne pouvais évidemment pas savoir quel interrupteur l'appelait!)


Oups, a fait travailler. Assurez-vous que lorsque vous ajoutez l'action cible pour inclure le côlon dans votre appel de sélecteur! Cela fonctionne @Selector (KeychainOptionSwitched :), ce n'est pas @Selector (KeychainOptionSwitched).