J'ai un CNSSEgmentedControl sur mon UI avec 4 boutons. Le contrôle est connecté à une méthode qui appellera différentes méthodes en fonction duquel le segment est cliqué: segment 4 a un menu attaché à celui-ci dans la méthode eWakefromnib. Je voudrais que ce menu tombe en panne lorsque l'utilisateur clique sur le segment. À ce stade, cela ne tombera que si l'utilisateur clique sur le menu. De mes recherches en ligne, cela est dû à l'action connectée. p> Je travaille actuellement autour de cela en utilisant un code pour obtenir le point d'origine du contrôle du segment et sur le menu contextuel à l'aide de NSMENU 'CODE> POPUPCONTEXTMENU: SANSEvent: Foreview CODE> Mais ceci est jolie hacktastic et a l'air mal comparée au comportement standard du menu déroulant sous la cellule de commande segmentée. p> est là pour que je puisse faire tomber le menu comme il se doit après un simple clic plutôt que de faire le menu contextuel hacky? p> p>
4 Réponses :
Je ne suis pas sûr de la manière intégrée de le faire (bien que ce soit vraiment un trou flagrant dans l'API de CroldControl).
Ma recommandation est de continuer à faire ce que vous faites sur le menu contextuel . Cependant, au lieu d'utiliser l'origine de la commande segmentée, vous pouvez la positionner directement sous le segment (comme vous le souhaitez) en procédant comme suit: p> Ce n'est pas parfait ou idéal, Mais il devrait faire le travail et donner l'apparence / le comportement que vos utilisateurs s'attendent. P> (comme à l'écart, NssegtedControl vraiment em> a besoin d'un -rectorCegment: code> méthode) p> p>
D'accord sur le fait que c'est assez boiteux, il n'y a pas de place intégrée pour le faire. Je l'ai déposé sur radar. Dupe Away: openradar.appspot.com/radar?id=61419
widthforSegment: retourne zéro si la taille automatique du segment. Si vous n'êtes pas préoccupé par les API sans papiers, il existe un rectorgegment: p>
mais pour répondre à la question initiale, un moyen plus facile d'obtenir le menu sur laquelle figurer immédiatement est de la sous-classe NssegmiedCell et de retourner 0 pour (encore une fois, sans-papiers) P>
Sous-classe NssegmeredCell, procédé de remplacement ci-dessous et remplacez la classe de cellules dans IB. (Nécessite aucune API privée).
- (SEL)action { //this allows connected menu to popup instantly (because no action is returned for menu button) if ([self tagForSegment:[self selectedSegment]]==0) { return nil; } else { return [super action]; } }
Cela fonctionne bien. De loin la solution la plus propre que j'ai vue. Merci!
Belle solution, en effet. Une suggestion mineure: définissez la condition IF sur [Auto-Mensibilisé: [Self sélectionné]]! = Nul code>; De cette façon, vous n'avez pas à définir des tags.
Ce genre fonctionne bien. Si le segment n'est pas déjà sélectionné, cliquez dessus, il ne fait rien. Clics après que le segment est sélectionné puis produisez le menu. Je ne vois pas comment cela fonctionne pour vous les gars sans ajuster ce comportement.
Cela devrait être la réponse sélectionnée. Il est bien plus agréable et plus facile que toute autre option.
Travaillé comme un charme pour moi aussi. Merci!
Travaille pour moi aussi. Mais une police cellulaire étrangement change (plus gros)
Comment faites-vous cela à Swift?
Merci - fonctionne parfaitement. Le comportement est exactement ce que je cherchais.
C'est la version Swift de la réponse de J Hoover et du MOD par Adam Treble. La substitution n'était pas aussi intuitive que je pensais que ce serait donc, alors cela aidera peut-être quelqu'un d'autre.
Je l'ai fait, mais pour une raison quelconque, la méthode "get" n'est jamais appelée.
Dans 10.10.2 / XCode 6.3 Le comportement standard du menu est de tomber lorsque l'utilisateur clique sur un segment qui n'a aucune action attachée à celle-ci; et pour exiger un clic-hold lorsque le segment a une ibaction. Étant donné que votre action est "Afficher le menu", vous devriez pouvoir le supprimer.
Comment attachez-vous des actions à des segments individuels?