背景 我有一个可以接收实时数据流的IOS应用程序。我已经实现了自定义值对象来存储/捕获实时流中的这些数据。我现在需要将自定义数据对象绑定到UI(主要使用调用这些自定义对象值的tableviews和自定义单元格)。
问题 如何使用Swift 3中的Bond,ReactiveKit或其他框架将自定义对象值数组绑定到我的UI?
示例代码
public class Device {
var name: String
var status: String
}
public class DeviceController {
var devices = Array<Device>()
// more code to init/populate array of custom Device classes
}
public class CustomViewController: ... {
var deviceController = DeviceController()
var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// more code to register custom cell
}
public class CustomCell:UITableviewCell {
@IBOutlet weak var deviceName: UILabel!
@IBOutlet weak var deviceStatus: UILabel!
}
答案 0 :(得分:0)
您使用委托模式,该模式已经为许多UIKit元素设置,包括UITableView。
UITableView有两个属性,可以是符合两个协议的任何对象,特别是
var dataSource: UITableViewDataSource?
var delegate: UITableViewDelegate?
因此,对于您的UITableView,您可以指定一个对象作为dataSource和delegate。通常,但并非总是如此,可以使包含ViewController的数据源和委托。
override func viewDidLoad() {
tableView.dataSource = self
tableView.delegate = self
...
}
但是,首先必须使ViewController符合这些协议。
public class CustomViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
命令单击两个一致性声明,您将能够看到必须添加到视图控制器以符合的方法。他们很明显他们做了什么,你可能会从那里弄清楚。
但具体来说你需要添加numberOfRows,numberOfSections和这个方法,我认为这是你要问的那个。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// dequeue a cell for reuse
// type cast the cell to your UITableViewCell subclass
// set the device name and device status labels like so..
cell.deviceName = deviceController.devices[indexPath.row].name
cell.deviceStatus = deviceController.devices[indexPath.row].status
return cell
}
从那里,tableView将在布局子视图时自动请求数据。如果您的数据没有立即全部可用,您可以调用tableView.reloadData()。