1
votes

Aligner le bouton sur le côté gauche de la cellule UITableView par programmation Swift

Je crée une application simple en utilisant Swift 5, Xcode 11 et un contrôleur de vue de table d'interface utilisateur. Dans la vue tableau de l'interface utilisateur, je veux 2 boutons: un bouton à gauche de ma vue tableau, l'autre à droite. J'ai essayé de nombreuses autres réponses à des questions similaires / similaires, mais elles ont toutes échoué (probablement parce que 1. Trop ancienne, 2. Réponse écrite en OBJ-C).

Voici mon contrôleur de vue de table:

import UIKit

@objcMembers class CustomViewController: UITableViewController {

    var tag = 0

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewDidAppear(_ animated: Bool) {
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    // 3
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        tag = tag + 1

        let cell = tableView.dequeueReusableCell(withIdentifier: "themeCell", for: indexPath) as! ThemeCell
        var cellButton: UIButton!


        cellButton = UIButton(frame: CGRect(x: 5, y: 5, width: 50, height: 30))
        cell.addSubview(cellButton)
        cell.img.image = UIImage(named: SingletonViewController.themes[indexPath.row])
        cell.accessoryView = cellButton
        cellButton.backgroundColor = UIColor.red
        cellButton.tag = tag
        return cell
    }

}

Voici ce que je reçois actuellement: IMG


7 commentaires

partagez la capture d'écran de ce que vous recevez actuellement.


pourquoi n'ajoutez-vous pas ces boutons avec le fichier .xib "themeCell"?


@ iOSArchitect.com Voir mes modifications


essayez comme ça cell.contentView.addSubview (cellButton) peut-être fonctionner


@RuchiMakadia Cela ne semble pas fonctionner


@Aamir, la raison pour laquelle je ne le fais pas est qu'après avoir défini les contraintes pour le bouton, je ne peux voir la vue de l'image que dans des tailles d'appareils spécifiques. C'est étrange.


vérifie ma réponse


4 Réponses :


2
votes

Au fur et à mesure que la cellule est réutilisée, vous devez mettre des boutons dans votre fichier xib. Vous ne devez pas créer un bouton à chaque fois et l'ajouter dans une cellule. Essayez ceci en ajoutant un bouton dans xib.


0 commentaires

5
votes

Vous pouvez obtenir un bouton d'alignement à droite et à gauche à partir de Contraintes Voici mon code pour aligner la vue à droite ou à gauche

override func viewDidLoad() {

        let leftButton = UIButton(type: .custom)
        leftButton.backgroundColor = UIColor.red
        self.view.addSubview(leftButton)

        leftButton.translatesAutoresizingMaskIntoConstraints = false
        let horizontalConstraint = leftButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20)
        let verticalConstraint = leftButton.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        let widthConstraint = leftButton.widthAnchor.constraint(equalToConstant: 100)
        let heightConstraint = leftButton.heightAnchor.constraint(equalToConstant: 100)
        NSLayoutConstraint.activate([horizontalConstraint, verticalConstraint, widthConstraint, heightConstraint])

        let rightButton = UIButton(type: .custom)
        rightButton.backgroundColor = UIColor.red
        self.view.addSubview(rightButton)

        rightButton.translatesAutoresizingMaskIntoConstraints = false
        let horizontalConstraintRight = rightButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20)
        let verticalConstraintRight = rightButton.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        let widthConstraintRight = rightButton.widthAnchor.constraint(equalToConstant: 100)
        let heightConstraintRight = rightButton.heightAnchor.constraint(equalToConstant: 100)
        NSLayoutConstraint.activate([horizontalConstraintRight, verticalConstraintRight, widthConstraintRight, heightConstraintRight])


    }

Contraintes de vue alignées à gauche et à droite


3 commentaires

Encore une chose, pourquoi le bouton sort-il de la ligne dans la cellule de vue de tableau? (Mon bouton sort de la ligne de ma vue de tableau lorsque je l'ai testé)


hors de la ligne? moyens ?


hors de la ligne verticalement?



6
votes

ajoutez ci-dessous le code pour appliquer la contrainte

let cellButton = UIButton(frame: CGRect.zero)
cellButton.translatesAutoresizingMaskIntoConstraints = false
cell.addSubview(cellButton)
cell.accessoryView = cellButton
cellButton.backgroundColor = UIColor.red

cellButton.leadingAnchor.constraint(equalTo: cell.leadingAnchor, constant: 5).isActive = true
cellButton.topAnchor.constraint(equalTo: cell.topAnchor, constant: 5).isActive = true
cellButton.widthAnchor.constraint(equalToConstant: 50).isActive = true
cellButton.heightAnchor.constraint(equalToConstant: 30).isActive = true


2 commentaires

Lorsque vous définissez cellButton.translatesAutoresizingMaskIntoConstraints = false , le paramètre de cadre est ignoré, il n'a aucun effet


oui vous avez raison, vous pouvez simplement définir comme UIButton (cadre: CGRect.zero)



2
votes
class ThemeCell: UITableViewCell { 


  //MARK:- Initialize View

  private let button : UIButton = {

   let button = UIButton()
   button.setTitle("Hello", .normal)
   button.backgroundColor = .red
   button.translatesAutoresizingMaskIntoConstraints = false
   return button

  }()

  //MARK:- View Life Cycle

   required init?(coder aDecoder: NSCoder) {

    super.init(coder: aDecoder)

}

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {

    super.init(style: style, reuseIdentifier: reuseIdentifier)

    setup()

}

override func awakeFromNib() {

    super.awakeFromNib()

}

override func setSelected(_ selected: Bool, animated: Bool) {

    super.setSelected(selected, animated: animated)

    selectionStyle = .none


}

//MARK:- User Defined Function

private func setup() {

   addSubView(button)
   button.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 20).isActive = true

   button.topAnchor.constraint(equalTo: topAnchor, constant: 20).isActive = true
   button.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -20).isActive = true


}
}
You can use AutoLayout Constraints like this to setup the button. No need to call it in the cellForRow method.

0 commentaires