1
votes

en utilisant une classe personnalisée définie dans le storyboard

Dans Xcode, je peux définir une classe personnalisée dans l'inspecteur d'identificateurs, mais comment puis-je les utiliser? Exemple suivant:

 entrez la description de l'image ici

class c1 : UITableViewCell {

  func celltest() {
        let i = 99;
    }
}

class NicePlaceTableViewController: UITableViewController {
.
.
.
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath)
        **cell.celltest()** .. has no member celltest
        let place = places[indexPath.row]
        cell.textLabel?.text = place.name
        cell.detailTextLabel?.text = "\(place.timestamp)"
        return cell
    }

Si le reuseIdentifier sera connu mais pas sa classe personnalisée - dans ce cas" c1 "- comment puis-je accéder aux méthodes définies dans la classe c1 sans violer les vérifications de compilation Xcodes?


0 commentaires

4 Réponses :


1
votes

Il vous suffit de forcer la conversion en c1:

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as! c1
cell.celltest()

Btw, c1 n'est pas un bon nom de classe. p>


0 commentaires

1
votes

Il vous suffit de taper la cellule comme objet de c1 . Vous pouvez le faire en écrivant le code ci-dessous dans la méthode cellForRowAt comme ceci:

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as! c1

Ainsi, le compilateur connaîtrait le type de votre classe de cellule tableview personnalisée et de votre cellule .celltest () ne vous donnera pas d'erreur.

Une autre référence au guide de style rapide qui peut vous aider grandement avec les noms de classes et les noms de méthodes:

https://github.com/raywenderlich/swift-style-guide


0 commentaires

1
votes

Je ne connais pas le nom de la classe "c1". Existe-t-il un moyen de l'obtenir dynamiquement? Je ne comprends pas pourquoi la cellule est interrogée par son reuseIdentifier "cell1" et xcode ne connaît pas la classe dans laquelle la cellule doit être spécifiée? (c1)


1 commentaires

J'ai peur que ça ne marche pas comme ça. Vous devez taper cast la cellule (avec la classe attribuée dans le storyboard), alors vous seul pouvez utiliser les propriétés et les méthodes de la cellule tableview personnalisée.



1
votes

Xcode Interface Builder est un IDE pour créer visuellement une interface utilisateur sceans.

Votre configuration d'une cellule qui est à l'intérieur d'une tableview instanciera un NicePlaceTableViewController avec une cellule c1 enregistrée dans la tableview.

Si il n'y a pas d'outil Xcode avec Interface Builder, vous devez le créer par vous-même par programmation comme suit:

let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath) as! c1

Ce code enregistre un type de classe pour un identifiant donné. Pour accéder à une cellule, vous devez utiliser une méthode tableView.dequeueReusableCell qui agira sur un pool interne pour créer ou réutiliser une cellule.

 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell1", for: indexPath)
}

Une cellule retirée de la file d'attente est un type UITableViewCell. Si vous souhaitez le réduire au type c1, vous devez utiliser! opérateur.

class NicePlaceTableViewController: UITableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(c1.self, forCellReuseIdentifier: "Cell1")
    }
}


0 commentaires