Comment accéder au contenu d'une cellule personnalisée dans Swift à l'aide de la balise de bouton?

Steve Rowe

J'ai une application qui a un bouton personnalisé dans une cellule personnalisée. Si vous sélectionnez la cellule, elle passe à une vue détaillée, ce qui est parfait. Si je sélectionne un bouton dans une cellule, le code ci-dessous imprime l'index de la cellule dans la console.

J'ai besoin d'accéder au contenu de la cellule sélectionnée (à l'aide du bouton) et de les ajouter à un tableau ou un dictionnaire. Je suis nouveau dans ce domaine et j'ai donc du mal à savoir comment accéder au contenu de la cellule. J'ai essayé d'utiliser didselectrowatindexpath, mais je ne sais pas comment forcer l'index à être celui de la balise ...

Donc, fondamentalement, s'il y a 3 cellules avec 'Dog', 'Cat', 'Bird' comme cell.repeatLabel.text dans chaque cellule et que je sélectionne les boutons dans les lignes 1 et 3 (Index 0 et 2), cela devrait ajoutez «Dog» et «Bird» au tableau / dictionnaire.

    // MARK: - Table View

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return postsCollection.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell: CustomCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomCell

    // Configure the cell...
    var currentRepeat = postsCollection[indexPath.row]
    cell.repeatLabel?.text = currentRepeat.product
    cell.repeatCount?.text = "Repeat: " + String(currentRepeat.currentrepeat) + " of " + String(currentRepeat.totalrepeat)

    cell.accessoryType = UITableViewCellAccessoryType.DetailDisclosureButton

    cell.checkButton.tag = indexPath.row;

    cell.checkButton.addTarget(self, action: Selector("selectItem:"), forControlEvents: UIControlEvents.TouchUpInside)


    return cell

}

func selectItem(sender:UIButton){

    println("Selected item in row \(sender.tag)")

 }
Vasil Garov

OPTION 1. Traitement avec délégation

La bonne façon de gérer les événements déclenchés à partir des sous-vues de votre cellule consiste à utiliser la délégation .

Vous pouvez donc suivre les étapes:

1. Au-dessus de votre définition de classe, écrivez un protocole avec une méthode d'instance unique dans votre cellule personnalisée:

protocol CustomCellDelegate {
    func cellButtonTapped(cell: CustomCell)
} 

2. Dans votre définition de classe, déclarez une variable de délégué et appelez la méthode de protocole sur le délégué:

var delegate: CustomCellDelegate?

@IBAction func buttonTapped(sender: AnyObject) {
    delegate?.cellButtonTapped(self)
}

3. Conformez-vous à CustomCellDelegate dans la classe où se trouve votre vue de table:

 class ViewController: CustomCellDelegate

4. Définissez le délégué de votre cellule

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomCell
    cell.delegate = self

    return cell
}

5. Implémentez la méthode requise dans votre classe de contrôleur de vue.

EDIT: Définissez d'abord un tableau vide, puis modifiez-le comme ceci:

private var selectedItems = [String]()

func cellButtonTapped(cell: CustomCell) {
    let indexPath = self.tableView.indexPathForRowAtPoint(cell.center)!
    let selectedItem = items[indexPath.row]

    if let selectedItemIndex = find(selectedItems, selectedItem) {
        selectedItems.removeAtIndex(selectedItemIndex)
    } else {
        selectedItems.append(selectedItem)
    }
}

items est un tableau défini dans mon contrôleur de vue:

private let items = ["Dog", "Cat", "Elephant", "Fox", "Ant", "Dolphin", "Donkey", "Horse", "Frog", "Cow", "Goose", "Turtle", "Sheep"] 

OPTION 2. Manipulation à l'aide de fermetures

J'ai décidé de revenir et de vous montrer une autre façon de gérer ce type de situations. L'utilisation d'une fermeture dans ce cas entraînera moins de code et vous atteindrez votre objectif.

1. Déclarez une variable de fermeture dans votre classe de cellule:

var tapped: ((CustomCell) -> Void)?

2. Appelez la fermeture à l'intérieur de votre gestionnaire de boutons.

@IBAction func buttonTapped(sender: AnyObject) {
    tapped?(self)
}

3. Dans tableView(_:cellForRowAtIndexPath:)la classe de contrôleur de vue conteneur:

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CustomCell       
cell.tapped = { [unowned self] (selectedCell) -> Void in
    let path = tableView.indexPathForRowAtPoint(selectedCell.center)!
    let selectedItem = self.items[path.row]

    println("the selected item is \(selectedItem)")
}

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive