Swift:仅调用一个TableView方法

时间:2018-12-08 12:11:34

标签: ios swift uitableview

当我运行应用程序时,仅调用numberOfRowsInSection()方法。因此,我在每个方法中都放置了一定数量的断点,但是我发现numberOfRowsInSection()被调用了4-5次,而其余的方法没有被调用。这是我的代码。

import UIKit


var arrSearch = [[String:Any]]()
class RecentSearchViewController: CustomNavigationViewController {
    @IBOutlet var tblSearch: UITableView!

    var searchBusVC:SearchBusViewController?
    override func viewDidLoad() {
        super.viewDidLoad()

          if let arr = UserDefault["SearchTo"]{ 
          arrSearch.append(arr as! [String:Any])
        } 
        tblSearch.reloadData()
    }

extension RecentSearchViewController: UITableViewDataSource , UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrSearch.count
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 200
    }
    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100
    }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "RecentCell") as! RecentCell
        cell.selectionStyle = .none
        let dict = arrSearch[indexPath.row]
        cell.lblFrom.text = (dict["From"] as! String)
        cell.lblTo.text = (dict["To"] as! String)
        let strDate = Utill.getStringFromDate("EEE MMM dd ,yyyy", date: (dict["fromdate"] as! Date))
        cell.lblDate.text = strDate
        return cell
    }
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let searchvc = self.searchBusVC {
            searchvc.setRecentSearch(dict: arrSearch[indexPath.row])

        }
        self.navigationController?.popViewController(animated: true)
    }

}


class RecentCell: UITableViewCell {
    @IBOutlet var lblFrom: UILabel!
    @IBOutlet var lblTo: UILabel!
    @IBOutlet var lblDate: UILabel!

}

我尝试了很多次,但是对我来说不起作用。即使在控制台中,也不会显示任何错误。代码有问题吗?

1 个答案:

答案 0 :(得分:0)

如果调用numberOfRowsInSection,但没有其他UITableViewDataSource方法,则必须意味着numberOfRowsInSection返回0。并且必须意味着arrSearch为空。另外,这部分代码

if let arr = UserDefault["SearchTo"] { 
      arrSearch.append(arr as! [String:Any])
}

应该被重写。由于您要转换下标的结果,因此可以将其作为if let的一部分来执行,如果结果不是[String:Any]类型的

,这也将使其更安全。
if let arr = UserDefault["SearchTo"] as? [String:Any] { 
      arrSearch.append(arr)
}

简而言之,显然UserDefault["SearchTo"]返回nil