web-dev-qa-db-fra.com

Swift tableView type d'accessoire de jeu de cellules

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet
    var tableView: UITableView
    var items: String[] = ["We", "Heart", "Swift"]

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "myCell")
    }


    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
        return self.items.count;
    }

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

        var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("myCell") as UITableViewCell

        cell.textLabel.text = self.items[indexPath.row]
        cell.accessoryType = UITableViewCellAccessoryType.DetailDisclosureButton
        cell.selectionStyle = UITableViewCellSelectionStyle.Blue
        tableView.separatorStyle = UITableViewCellSeparatorStyle.None
        return cell
    }

    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
        println("You selected cell #\(indexPath.row)!")

    }
}

Mon problème est que l'accessoireType et le selectionStyle ne sont pas modifiés. Le tableView.separatorStyle est modifié ainsi que le cell.textlabel.text. Comment puis-je résoudre ce problème?

17
user3748930

ITableViewCell.SelectionStyle.blue

La cellule a une couleur d'arrière-plan par défaut lorsqu'elle est sélectionnée.

Dans iOS 7, la couleur de sélection n'est plus bleue. Utilisez plutôt UITableViewCell.SelectionStyle.default.

Quant au accessoryType, il devrait fonctionner correctement tant que vous ne le modifiez pas plus tard ailleurs. Assurez-vous que la largeur de la table est correcte, sinon les vues des accessoires peuvent être hors écran.

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet
    var tableView: UITableView

    var items: String[] = ["We", "Heart", "Swift"]

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "myCell")
    }


    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
        return self.items.count;
    }

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

        var cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier("myCell") as UITableViewCell
        cell.textLabel.text = self.items[indexPath.row]
        cell.selectionStyle = UITableView.CellSelectionStyle.blue

        /*
        enum UITableViewCellAccessoryType : Int {
        case none // don't show any accessory view
        case disclosureIndicator // regular chevron. doesn't track
        case detailDisclosureButton // info button w/ chevron. tracks
        case checkmark // checkmark. doesn't track
        case detailButton // info button. tracks
        }
        */

        // Standard options
        cell.accessoryType = UITableViewCell.AccessoryType.none
        cell.accessoryType = UITableViewCell.AccessoryType.disclosureIndicator
        cell.accessoryType = UITableViewCell.AccessoryType.detailDisclosureButton
        cell.accessoryType = UITableViewCell.AccessoryType.checkmark
        cell.accessoryType = UITableViewCell.AccessoryType.detailButton

        // Custom view options
        cell.accessoryType = UITableViewCell.AccessoryType.none
        cell.accessoryView = UIView(frame: CGRectMake(0, 0, 20, 20))
        cell.accessoryView.backgroundColor = UIColor.blueColor()

        return cell
    }

    func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
        println("You selected cell #\(indexPath.row)!")

    }
}

Notez que ce n'est pas une bonne solution pour définir separatorStyle de la table chaque fois que la cellule est demandée, à la place le faire une fois lorsque le tableView est chargé: à viewDidLoad.

25
A-Live

Je n'ai pas eu de chance de le définir dans la méthode cellForRowAtIndexPath, en le déplaçant vers willDisplayCell, j'ai résolu le problème avec le fait qu'il n'apparaissait pas.

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    cell.accessoryType = .DisclosureIndicator
}
7
Derek Hewitt

Je voudrais partager mon expérience à ce sujet, j'ai eu le même problème, cell.accessoryType = IUTableViewCellAccessoryType.Checkmark Et j'ai remarqué que ma vue de table n'avait pas de contraintes, j'ai donc ajouté des contraintes manquantes puis cela a fonctionné pour moi

1
Seelass

Vous trouverez ci-dessous votre accessoireView comme une icône nommée "sentIcon". Au cas où!!!

        let sentImage = UIImage(named: "sentIcon")
        let sentImageView = UIImageView(image: sentImage)
        sentImageView.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
        sentImageView.tintColor = .lightGray
        cell.accessoryView = sentImageView
0
coders