在数据重新加载时未调用cellForRowatIndexPath,但该节中没有行

时间:2018-12-12 21:22:59

标签: ios swift uitableview

我第一次将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并将其限制在视图边缘。

0 个答案:

没有答案