web-dev-qa-db-fra.com

UITableView en utilisant Swift

Mon TapCell1.Swift

Ceci est personnalisé UITableViewCell View

import UIKit

class TapCell1: UITableViewCell
{
    @IBOutlet var labelText : UILabel

    init(style: UITableViewCellStyle, reuseIdentifier: String!)
    {
        println("Ente")
        super.init(style: UITableViewCellStyle.Value1, reuseIdentifier: reuseIdentifier)
    }

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

        super.setSelected(selected, animated: animated)
    }
}

Mon ViewController.Swift

Toutes ses sources de données et tous ses délégués sont définis correctement.Mais ma cellule personnalisée ne s'affiche pas.

import UIKit

class NextViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
    {
        @IBOutlet var label: UILabel

        @IBOutlet var tableView : UITableView

        var getvalue = NSString()

        override func viewDidLoad()
        {
            super.viewDidLoad()

            label.text="HELLO GOLD"

            println("hello : \(getvalue)")
            self.tableView.registerClass(TapCell1.self, forCellReuseIdentifier: "Cell")
        }

        func tableView(tableView:UITableView!, numberOfRowsInSection section:Int)->Int
        {
            return 5
        }

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

        func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
        {
            var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as TapCell1
            cell.labelText.text="Cell Text"
            return cell
        }

        override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
        }
}

Le problème est que ma cellule personnalisée n'est pas affichée. S'il vous plaît suggérer quelque chose que j'ai mal fait.

Remarque: voici mon code Lien de téléchargement de mon fichier

24
PREMKUMAR

Je l'ai finalement fait.

Pour TapCell1.Swift

import UIKit

class TapCell1: UITableViewCell {

    @IBOutlet var labelTitle: UILabel

    init(style: UITableViewCellStyle, reuseIdentifier: String!) {
        super.init(style: UITableViewCellStyle.Value1, reuseIdentifier: reuseIdentifier)
    }
}

Pour NextViewController.Swift

import UIKit

class NextViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet var tableView: UITableView

    var ListArray=NSMutableArray()

    override func viewDidLoad() {
        super.viewDidLoad()

        let nibName = UINib(nibName: "TapCell1", bundle:nil)
        self.tableView.registerNib(nibName, forCellReuseIdentifier: "Cell")

        for i in 0...70 {
            ListArray .addObject("Content: \(i)")
        }
    }


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

    func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 51
    }

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

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

        //cell.titleLabel.text = "\(ListArray.objectAtIndex(indexPath.item))"

        cell.labelTitle.text = "\(ListArray.objectAtIndex(indexPath.row))"

        return cell
    }
}

Mon lien de code de travail: TABLE PERSONNALISÉE

46
PREMKUMAR

Vous devez enregistrer la class pour la cellule. Pour cela, changez cette ligne de code en 

self.tableView.registerClass(TapCell1.classForCoder(), forCellReuseIdentifier: "Cell")

Modifier

Votre code est bien, je l'ai vérifié 

//cell.labelText.text="Cell Text"

cell.textLabel.text="Cell Text"   // use like this
9
Anil Varghese

La solution est probablement de déterminer la hauteur de la cellule manuellement:

override func tableView(tableView:UITableView!, heightForRowAtIndexPath indexPath:NSIndexPath)->CGFloat
{
    return 44
}

Je crois que c'est un bug de Xcode beta 6.

3
Micah

Je suis maintenant capable de faire fonctionner Custom UITableViewCell.

Travaille sur

  • Fonctionne sur Xcode 6 beta 6
  • Fonctionne sur Xcode 6 beta 5

  • iOS est 7.1

Comment

  • J'ai créé un fichier ".xib" pour la cellule.
  • Je le copie dans le storyboard.
  • Via le storyboard, je lui donne un identifiant.
  • Je m'assure que c'est un sous-enfant d'une tableview

En procédant de cette façon, vous n’avez pas besoin d’enregistrer une classe, une plume, etc.

Ceci est ma cellule personnalisée.

 import UIKit 

 class TestCell: UITableViewCell {
.____. @IBOutlet var titleImageView: UIImageView! 
 @IBOutlet var titleLabel: UILabel! 

 écrasez init (style: UITableViewCellStyle, reuseIdentifier: String!) {
 super.init (style: style, reuseIdentifier: reuseIdentifier) ​​
 } 

 remplacez func awakeFromNib () {
 super.awakeFromNib () 
 // Code d'initialisation 
 } 

 requis init (codeur aDecoder: NSCoder) {
 super.init (codeur: aDecoder) 
 } 
} 

Selon vous, ou où que vous soyez, vous étendez "UITableViewDataSource" . Assurez-vous que "cell2" est identique à "Identifier" que vous lui avez donné via le storyboard.

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

 var cell: TestCell = tableView.dequeueReusableCellWithIdentifier ("cell2", forIndexPath: indexPath) en tant que TestCell 

 // Exemple d'utilisation des éléments personnalisés .
 cell.titleLabel.text = self.items [indexPath.row] 

 var topImage = UIImage (nommé: "fv.png") 
 cell.titleImageView.image = topImage 

 cellule de retour 
} 

uitableviewcell

1
thefreshteapot

Si vous n'utilisez pas Storyboard, créez un nouveau fichier en tant que sous-classe de UITableViewCell, cochez la case "Créer également des fichiers xib" après avoir défini votre cellule personnalisée. Voici le code pour tableview 

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

    var customcell:CustomTableViewCellClass? = tableView.dequeueReusableCellWithIdentifier("cell") as? CustomTableViewCellClass
    if  (customcell==nil)
    {
        var nib:NSArray=NSBundle.mainBundle().loadNibNamed("CustomTableViewCellClass", owner: self, options: nil)

        customcell = nib.objectAtIndex(0) as? CustomTableViewCell
    }

    return customcell!


}
0
guru

Essayez ce code suivant: 

var cell = tableView.dequeueReusableCell(withIdentifier: "CustomCellTableView") as? CustomCellTableView
0
Soumya Soni

Vérifiez votre panneau de récit et sélectionnez la cellule, puis consultez l'inspecteur d'identité en sélectionnant le type de votre classe, votre classe CustomClass et le type de module, le nom de votre projet. 

Je l'ai fait Cela fonctionne parfaitement essayez cette astuce pour éviter les erreurs de voir ci-dessous l'image et le code

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

 // let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: nil)

  //  cell.textLabel.text = array[indexPath!.row] as String

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as CustomTableViewCell

    cell.nameLabel.text = array[indexPath!.row] as String
    cell.RestaurentView.image = UIImage(named:images[indexPath!.row])

    return cell
}
0
Quad