Ios 如何在swift中自定义UITableViewCell

Ios 如何在swift中自定义UITableViewCell,ios,iphone,swift,uitableview,Ios,Iphone,Swift,Uitableview,我是swift的新手,我尝试定制UITableViewCell,我在youtube和互联网上看到了很多教程。但我做不到,我尝试了很多方法,但没有任何改变。 这是我的密码: class movieViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { var categories = ["Action", "Drama", "Science Fiction", "Kids", "Horror"]

我是swift的新手,我尝试定制UITableViewCell,我在youtube和互联网上看到了很多教程。但我做不到,我尝试了很多方法,但没有任何改变。 这是我的密码:

class movieViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

var categories = ["Action", "Drama", "Science Fiction", "Kids", "Horror"]


@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var btnMenu: UIBarButtonItem!
override func viewDidLoad() {
    super.viewDidLoad()
    btnMenu.target = self.revealViewController()
    btnMenu.action = Selector("revealToggle:")

    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
    self.revealViewController().rearViewRevealWidth = 200
    self.tableView.registerClass(CategoryRow.self, forCellReuseIdentifier: "Cell")

    // Do any additional setup after loading the view.
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return categories[section]
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return categories.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! CategoryRow
    cell.labelA.text = self.categories[indexPath.row]
    cell.labelB.text = self.categories[indexPath.row]

    return cell
}
斯威夫特分类:

还有我的错误:


您尚未分配labelA或labelB。这就是为什么要显示错误。将标签与UI连接如下:

您需要在viewDidLoad中添加一个数据源

viewDidLoad() {
  self.tableView.delegate = self
  self.tableView.datasource = self
}

您需要通过输出而不是变量来创建labelA和labelB。按住控制键并将其从故事板拖动到Coresponding文件,然后放开,选择outlet并将其命名为labelA和labelB

您尚未链接labelA inStoryboard。

您似乎没有xib。你只需要声明你的标签,但你不初始化它。所以拉贝拉和拉贝尔将为零。它使我崩溃

如果您不想要xib,您必须在下面的代码中实现两个类似CategoryRow的函数:

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

}

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    self.labelA = UILabel(frame: CGRectMake(0,0, self.contentView.frame.size.width, self.contentView.frame.size.height))
//Same here for labelB
    self.contentView.addSubview(labelA)
}
另一种方法是创建与类同名的xib UITableCiewCell。设置这个单元格是你的类。您在这个xib中设计labelA和labelB,并将插座拖到类中。然后在viewDidLoad中进行修改

viewDidLoad() {
  self.tableView.delegate = self
  self.tableView.datasource = self
}

@vien vu的答案是正确的,但没有XIB怎么办??是swift中自定义单元格的完整解决方案

在何处创建labelA和Labelb如果未设置委托,则不会调用委托方法。重写viewDidLoad方法而不调用super.viewDidLoad会让您被bug咬到。标签部分是正确的。OMG您是否保存了我,如果我有.xib如何?如果我更改label->UIImageView如何?不要用锡伯?是的,我是越南人。与用户标签相同。您必须计算UIImageView的帧。多尺寸的iPhone看起来很复杂。你有skype或facebook地址吗?vienvtl_89这是我的skype。
 self.tableView.registerNib(UINib(nibName: "nameYourxib"), forCellReuseIdentifier: "Cell")