我第一次将xib文件用作表视图单元格,但无法显示笔尖数据或将此单元格加载到表中。 这是视图控制器文件:
import UIKit
import WebKit
import MapKit
class DetailedListingTableViewController: UIViewController,WKUIDelegate{
@IBOutlet var tableView: UITableView!
var listingId : Int = 0
override func viewDidLoad() {
super.viewDidLoad()
setSearchController()
let viewModel = DetailListingModel(id: listingId,tableView:self.tableView)
self.view.addSubview(tableView)
tableView.dataSource = viewModel
tableView.delegate = viewModel
tableView.register(MapTableViewCell.nib, forCellReuseIdentifier: MapTableViewCell.identifier)
}
}
然后是视图模型类:
import Foundation
import UIKit
class DetailListingModel: NSObject,UITableViewDataSource,UITableViewDelegate{
var items = [DetailedListingItem]()
override init() {
super.init()
}
init(id:Int,tableView:UITableView){
super.init()
NetworkController.getListingData(id: String(id)) { (listingUnderCategory) in
DispatchQueue.main.async {
if let lat = listingUnderCategory.data?.geo?.lat, let long = listingUnderCategory.data?.geo?.lng{
let viewModelItem = DetailedListingViewModelMap(lat: NSNumber(value:lat), long: NSNumber(value:long))
self.items.append(viewModelItem)
}
tableView.reloadData()
}
}
}
func numberOfSections(in tableView: UITableView) -> Int {
print(items.count)
return items.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print(items[section].rowCount)
return items[section].rowCount
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let item = items[indexPath.section]
switch item.type{
case .Map:
if let cell = tableView.dequeueReusableCell(withIdentifier:MapTableViewCell.identifier, for: indexPath) as? MapTableViewCell{
cell.item = item
return cell
}
}
return UITableViewCell()
}
}
enum DetailedListingViewModelItemType {
case Map
}
protocol DetailedListingItem{
var type: DetailedListingViewModelItemType{get}
var rowCount: Int {get}
var sectionTitle: String {get}
}
extension DetailedListingItem{
var rowCount: Int{
return 1
}
}
class DetailedListingViewModelMap:DetailedListingItem{
var type: DetailedListingViewModelItemType{
return .Map
}
var lat:NSNumber
var long:NSNumber
var sectionTitle: String{
return "Map"
}
init(lat:NSNumber,long:NSNumber){
self.lat = lat
self.long = long
}
}
问题是重新加载表数据后,节数和节中的行数正在工作,但是cellForRow方法未显示xib文件的单元格。 最后,这是带有约束的xib文件的图像。 enter image description here 并且视图控制器是uiViewcontroller,其中添加了tableview并将其限制在视图边缘。