为了账号安全,请及时绑定邮箱和手机立即绑定

带有多个Swift的自定义单元格的UITableview

带有多个Swift的自定义单元格的UITableview

我想将UITableview与其他自定义tableViewCells一起使用。我的三个单元格是这样的:单元格1:应具有图片和标签。Cell2:应有两个标签。Cell3:应该有一个dayPicker。我不想为单元格编码。如何在Swift中进行管理。我必须为每个单元格编写自己的类吗?我可以使用一个tableviewController吗?如何填充不同单元格中的数据?我想生成一个tableView,就像iOS设备的联系人应用程序一样。
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

Swift 3.0 +最少代码更新

基本概念: 使用动态单元原型创建表视图。分配标识符并为每个单元原型创建自定义表格视图单元类。在表视图的委托方法中启动并显示自定义单元格。

1.在情节提要板上创建单元格

将tableView拖到您的视图控制器,向其添加原型单元,然后将UI元素拖放至您的表视图单元,并根据需要适当添加约束。

//img1.sycdn.imooc.com//5d9825a900013b2f06140369.jpg

2.创建自定义UITableViewCell类


将以下代码添加到您的项目。我把它放在视图控制器类之上。


class FirstTableCell: UITableViewCell {

}


class SecondTableCell: UITableViewCell {

}


class ThirdTableCell: UITableViewCell {   

}

3.将自定义类和标识符分配给单元原型


对于情节提要中的每个单元原型,分配从步骤2创建的自定义类,然后输入唯一的标识符。

//img1.sycdn.imooc.com//5d9825e40001837500800048.jpg


4.将UI元素连接到快速代码


Control拖动表视图并连接到视图控制器类。控件拖动在步骤1中添加到单元原型的UI元素,并连接到相应的表视图单元类。


//img1.sycdn.imooc.com//5d9825ed0001247f00320033.jpg

5.添加代码以查看控制器并控制表视图


使您的视图控制器符合表视图委托


class YourViewController: UIViewController, UITableViewDataSource, UITableViewDelegate

在中viewDidLoad,设置表视图的委托和数据源。


override func viewDidLoad() {

    super.viewDidLoad()


    self.tableView.dataSource = self

    self.tableView.delegate = self


}

最后,根据最低要求,添加两个委托方法来控制您的表视图。


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return 3

}


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

    if indexPath.row == 0 {

        let cell = tableView.dequeueReusableCell(withIdentifier: "firstTableCell") as! FirstTableCell

        // Set up cell.label

        return cell

    } else if indexPath.row == 1 {

        let cell = tableView.dequeueReusableCell(withIdentifier: "secondTableCell") as! SecondTableCell

        // Set up cell.button

        return cell

    } else {

        let cell = tableView.dequeueReusableCell(withIdentifier: "thirdTableCell") as! ThirdTableCell

        // Set up cell.textField

        return cell

    }

}

6.试试看:)

//img1.sycdn.imooc.com//5d9825d70001686e00560028.jpg

查看完整回答
反对 回复 2019-10-05
?
Helenr

TA贡献1780条经验 获得超4个赞

上面的答案是最好的答案,但是有很多原因可以解决此问题。对于有此问题的任何人,这是另一个潜在的解决方案:


我的问题是我在选择ViewController类而不是Storyboard视图。因此,由于未使用情节提要,因此我对情节提要单元的引用毫无意义。


我正在这样做:


let viewControllerB = SubViewController()

viewControllerB.passedData = diseases[indexPath.row].name

navigationController?.pushViewController(viewControllerB, animated: true)

我需要做这样的事情:


let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

let nextViewController = storyBoard.instantiateViewController(withIdentifier: "SubViewStoryboardController") as! SubViewController

nextViewController.passedData = diseases[indexPath.row].name

self.present(nextViewController, animated:true, completion:nil)


查看完整回答
反对 回复 2019-10-05
  • 3 回答
  • 0 关注
  • 914 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信