我试图在选择表格行时将数据从 UITableViewDataSource 传递到 UIViewController。我想我已经很接近了。
协议(protocol)
protocol BusDataDelegate {
func didSelectRow(row: NSIndexPath, data: Route)
}
数据源
class BusUITableView: NSObject, UITableViewDelegate, UITableViewDataSource {
var busDataDelegate: BusDataDelegate?
var routeService: RouteService = RouteService()
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var busRoutes: [Route] = routeService.retrieve()
return busRoutes.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:BusUITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell") as BusUITableViewCell
var busRoutes: [Route] = routeService.retrieve()
cell.routeName.text = busRoutes[indexPath.row].name
cell.routeNumber.text = busRoutes[indexPath.row].id
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var busRoutes: [Route] = routeService.retrieve()
busDataDelegate?.didSelectRow(indexPath, data: busRoutes[indexPath.row])
println("You selected cell #\(indexPath.row)!")
}
}
View Controller - 缩写
class ViewController: UIViewController, MKMapViewDelegate, BusDataDelegate {
func didSelectRow(row: NSIndexPath, data: Route) {
println("Row: \(row) Data: \(data)")
}
}
最佳答案
问题是您只声明了 busDataDelegate
对象,没有给它分配任何东西或没有分配它。
你是这样声明的:
var busDataDelegate: BusDataDelegate?
像这样使用它:
busDataDelegate?.didSelectRow(indexPath, data: busRoutes[indexPath.row])
但从来没有为该对象分配任何东西或分配它,这就是问题所在。
关于ios - 在 Swift 中使用协议(protocol)和委托(delegate)将数据从 UITableViewDataSource 传递到 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27752539/