Doigt et le bouton “Plus” (comme dans l'application de Messagerie sur iOS 7)
Comment créer un bouton "plus" lorsque l'utilisateur glisser une cellule dans le tableau de la vue (comme application de messagerie dans ios 7)
J'ai été chercher cette information à la fois ici et dans le Cocoa Touch forum, mais je n'arrive pas à trouver la réponse et je suis en espérant que quelqu'un de plus intelligent que moi peut me donner une solution.
Je voudrais que lorsque l'utilisateur effectue un affichage de tableau de cellules, pour afficher plus d'un bouton d'édition (il est par défaut le bouton supprimer).
Dans l'application de Messagerie pour iOS 7, vous pouvez faire glisser pour supprimer, mais il y a un bouton "PLUS" qui s'affiche.
- Essayez l'URL ci-dessous: HHPanningTableViewCell LRSlidingTableViewCell TISwipeableTableView RMSwipeTableViewCell
- Pour ajouter le bouton "Supprimer" - je mettre en œuvre les deux fonctions suivantes. - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath; - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath; Et je tiens à ajouter le bouton "Plus" à côté de lui.
- Bansal l'air de quelqu'un dans ce fil (devforums.apple.com/message/860459#860459 dans l'Apple developer forum) est allé de l'avant et ont construit leur propre mise en œuvre. Vous pouvez trouver un projet qui fait ce que vous voulez sur GitHub:github.com/daria-kopaliani/DAContextMenuTableViewController
- merci pour la solution, il fonctionne comme un charme. Cette question est N ° 1 suite à de nombreuses recherches sur google, et les gens sont obligés d'échanger leurs connaissances à l'aide des commentaires parce que certains gars a décidé qu'il est plus utile de près la question et de prêcher la démocratie à la place. Ce lieu est clairement mieux mods.
- Vérifiez ceci : teehanlax.com/blog/reproducing-the-ios-7-mail-apps-interface et ma mise en œuvre à l'aide de mise en page automatique github.com/Jafared/JASwipeCellExperiment
- Je pense que ce tutoriel peut vous aider: raywenderlich.com/62435/...
- Si vous pouvez cibler iOS 8, ma réponse ci-dessous sera ce que vous voulez.
- comme d'iOS 11 cela est possible sans code tiers. faites défiler vers le bas pour ma réponse
- Comment définir la largeur des boutons de rowEditActionButtons
Vous devez vous connecter pour publier un commentaire.
Comment mettre en Œuvre
Il ressemble à iOS 8 ouvre cette API. Notes de telles fonctionnalités sont présentes dans la Bêta 2.
Pour obtenir quelque chose de travail, mettre en œuvre l'une des deux méthodes suivantes sur votre UITableView déléguée pour obtenir l'effet désiré (voir l'essentiel pour un exemple).
Problèmes Connus
La documentation dit tableView:commitEditingStyle:forRowAtIndexPath est:
Cependant, le balayage ne fonctionne pas sans elle. Même si la méthode tampon est vide, il a encore besoin d'elle, pour l'instant. C'est le plus évident d'un bug dans la version bêta 2.
Sources
https://twitter.com/marksands/status/481642991745265664
https://gist.github.com/marksands/76558707f583dbb8f870
Réponse Originale À Cette Question: https://stackoverflow.com/a/24540538/870028
Mise à jour:
Exemple de code avec ce travail (En Swift): http://dropbox.com/s/0fvxosft2mq2v5m/DeleteRowExampleSwift.zip
L'exemple de code contient ceci facile-à-suivez la méthode dans MasterViewController.swift, et avec cette méthode, vous obtenez le comportement montré dans l'OP capture d'écran:
endEditing:
sur la tableview ne semble pas faire quoi que ce soit.tableView.editing = false
(NO
en objc) et la cellule va "fermer".J'ai créé une nouvelle bibliothèque à mettre en œuvre swippable boutons qui prend en charge une variété de transitions et extensible boutons comme iOS 8 application de messagerie.
https://github.com/MortimerGoro/MGSwipeTableCell
Cette bibliothèque est compatible avec toutes les différentes façons de créer un UITableViewCell et ses testé sur iOS 5, iOS 6, iOS 7 et iOS 8.
Ici un échantillon de certaines transitions:
Frontière de la transition:
Clip de transition
De Transition 3D:
De Johnny réponse est la bonne pour upvote. Je suis juste en ajoutant cette ci-dessous en objective-c pour le rendre plus clair pour les débutants (et ceux d'entre nous qui refusent d'apprendre Swift syntaxe 🙂
Assurez-vous de déclarer le uitableviewdelegate et ont des méthodes suivantes:
C'est (ridicule) une API privée.
Les deux méthodes suivantes sont privés et envoyé à la UITableView du délégué:
Ils sont assez explicites.
À améliorer sur Johnny réponse, cela peut maintenant être fait en utilisant l'API publique comme suit :
J'espère que tu ne peux pas attendre jusqu'à apple vous donne ce que jamais vous avez besoin? Voici donc mon option.
Créer une cellule personnalisé. Deux uiviews en elle
En vue du bas, ajouter ce que jamais boutons dont vous avez besoin. Traiter ses actions
comme n'importe quel autre IBActions. vous pouvez décider d'un temps d'animation, de style et de rien.
maintenant ajouter un uiswipegesture pour le point de vue supérieur et de révéler le bas de votre point de vue sur geste de balayage. J'ai fait ça avant, et c'est l'option la plus simple pour autant que je suis concerné.
Espérer que l'aide.
Ce n'est pas possible à l'aide du SDK standard. Cependant, il existe différentes 3ème partie des solutions plus ou moins imiter le comportement dans le Courrier.app. Certains d'entre eux (par exemple,MCSwipeTableViewCell, DAContextMenuTableViewController, RMSwipeTableViewCell) détecter le passage des doigts à l'aide de modules de reconnaissance de geste, certains d'entre eux (par exemple,SWTableViewCell) mettre une deuxième UISScrollView en dessous de la norme
UITableViewCellScrollView
(privé sous-vue deUITableViewCell
) et certains d'entre eux de modifier le comportement deUITableViewCellScrollView
.J'aime la dernière approche plus depuis le toucher de la manipulation semble le plus naturel. Plus précisément, MSCMoreOptionTableViewCell est bon. Votre choix peut varier en fonction de vos besoins spécifiques (si vous avez besoin d'une gauche à droite pan, aussi, si vous avez besoin d'iOS 6, compatibilité, etc.). Sachez également que la plupart de ces approches viennent avec un fardeau: ils peuvent facilement se casser dans une future version d'iOS si Apple fait des changements dans la
UITableViewCell
sous-vue de la hiérarchie.Swift 3 version de code sans utiliser de bibliothèque:
Vous avez besoin à la sous-classe
UITableViewCell
et la sous-classe de la méthodewillTransitionToState:(UITableViewCellStateMask)state
qui est appelée chaque fois que l'utilisateur glisse la cellule. Lestate
drapeaux vous permettra de savoir si le bouton Supprimer est affiché, et afficher/masquer votre bouton Plus là.Malheureusement, cette méthode vous donne ni la largeur du bouton Supprimer, ni le temps de l'animation. Si vous avez besoin d'observateur & dur-code de votre bouton Plus du cadre et de temps de l'animation dans votre code (personnellement, je pense que Apple a besoin de faire quelque chose à ce sujet).
Pour swift programmation
CELA POURRAIT VOUS AIDER.
Je cherchais à ajouter la même fonctionnalité à mon application, et après avoir traversé tant de différents tutoriels (raywenderlich être la meilleure solution de BRICOLAGE), je trouve qu'Apple a son propre
UITableViewRowAction
classe, ce qui est très pratique.Vous devez changer le Tableview de boilerpoint méthode pour cela:
Vous pouvez trouver plus d'informations à ce sujet sur Ce Site. Apple propre documentation est vraiment utile pour changer la couleur d'arrière-plan:
Si vous souhaitez modifier la police du bouton, c'est un peu plus délicat. J'ai vu un autre post sur DONC. Pour l'amour de vous fournir le code ainsi que le lien, voici le code qu'ils y sont utilisés. Vous devez changer l'apparence du bouton. Vous auriez à faire une référence spécifique à tableviewcell, sinon vous changeriez le bouton apparence tout au long de votre application (je ne voulais pas, mais vous pourriez le faire, je ne sais pas 🙂 )
Objectif C:
Swift:
C'est le plus facile, et la plupart des flux de données-version doublée à mon humble avis. Espérons que cela aide.
Mise à jour: Voici la Swift version 3.0:
shareMenu.
ne pas prendre unaddAction
méthode. MerciRéelle Swift 3 Réponse
C'est la SEULE fonction dont vous avez besoin. Vous n'avez pas besoin CanEdit ou CommitEditingStyle fonctions pour les actions personnalisées.
Que de iOS 11 c'est la disposition du public en
UITableViewDelegate
. Voici un exemple de code:Également disponibles:
- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath;
Docs: https://developer.apple.com/documentation/uikit/uitableviewdelegate/2902367-tableview?language=objc
Swift 4 & iOs 11+
J'ai utilisé tableViewCell pour afficher plusieurs données, après balayage () de droite à gauche sur une cellule, vous trouverez deux boutons d'Approuver Et de rejeter, il y a deux méthodes, la première est ApproveFunc qui prend un argument, et l'autre est RejectFunc qui prend également un argument.
Ici est un peu fragile façon de faire qui n'implique pas des Api privées ou de la construction de votre propre système. Vous êtes à la couverture de vos paris que Apple ne veut pas briser ce et que j'espère qu'ils vont libérer une API que vous pouvez remplacer ces quelques lignes de code avec.
Cela exige également de mettre en œuvre la norme de la vue de la table de montage délégué rappels.
Il y a une étonnante bibliothèque appelée
SwipeCellKit
, il devrait obtenir plus de reconnaissance. À mon avis, il est plus froid queMGSwipeTableCell
. Ce dernier n'est pas complètement reproduire le comportement de l'application de Messagerie de cellules alors queSwipeCellKit
n'. Avoir un coup d'oeilSwipeCellKit
et a été impressionné... jusqu'à ce que j'en ai eu un de ces Exceptions, parce que le nombre de lignes devant une vue de la table de mise à jour n'était pas la même qu'après la mise à jour de +/- changement dans les lignes. La chose est, je n'ai jamais changé mon jeu de données. Donc, si ce n'est pas inquiétant, je ne sais pas ce que c'est. J'ai donc décidé de l'utiliser et juste utilisé le nouveau UITableViewDelegate méthodes. Si vous avez besoin de plus d'options de personnalisation, vous pouvez toujours remplacerwillBeginEditingRowAt: ....
Swift 4
Voici une solution simple. Il est capable d'afficher et de masquer personnalisé UIView à l'intérieur de UITableViewCell.
L'affichage de la logique est contenue à l'intérieur de la classe étendue de UITableViewCell, BaseTableViewCell.
BaseTableViewCell.h
BaseTableViewCell.M
Pour obtenir cette fonctionnalité, simple d'étendre votre vue de la table de la cellule de BaseTableViewCell.
Prochaine,
À l'intérieur de UIViewController, qui mettent en œuvre UITableViewDelegate, la création de deux modules de reconnaissance de geste de la poignée à gauche et à droite de glisse.
Que d'ajouter deux balayez les gestionnaires
Maintenant, à l'intérieur cellForRowAtIndexPath, de UITableViewDelegate, vous pouvez créer des UIView et de l'attacher à l'retiré de la cellule.
Bien sûr, cette façon de chargement de la coutume UIView est juste pour cet exemple. Le gérer comme vous le souhaitez.