成员'tableView(_:didSelectRowAt :)'(Swift)的模糊引用

时间:2018-06-06 20:29:28

标签: swift uitableview uisearchbar

我正在尝试搜索tableview中显示的数组,并且我正在关注this教程,但是当我尝试调用reloadData()方法时,我得到对成员'tableView的不明确引用( _:didSelectRowAt:)'

知道我缺少什么吗?

提前感谢任何提示。 这是我的ListController.swift代码:

import UIKit

var arrayIndex = 0

class ListController: UIViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate {


    let data = ["New York, NY", "Los Angeles, CA", "Chicago, IL", "Houston, TX",
                "Philadelphia, PA", "Phoenix, AZ", "San Diego, CA", "San Antonio, TX",
                "Dallas, TX", "Detroit, MI", "San Jose, CA", "Indianapolis, IN",
                "Jacksonville, FL", "San Francisco, CA", "Columbus, OH", "Austin, TX",
                "Memphis, TN", "Baltimore, MD", "Charlotte, ND", "Fort Worth, TX"]

    var filteredData: [String]!

    @IBOutlet var searchBarOutlet: UISearchBar!

    //Table Delegate
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        arrayIndex = indexPath.row
        performSegue(withIdentifier: "segue", sender: self)
    }

    // Table Data Source
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return filteredData.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        // Cell Data Source

        let cell = tableView.dequeueReusableCell(withIdentifier: "TableCell", for: indexPath) as UITableViewCell
        cell.textLabel?.text = filteredData[indexPath.row]


        // Cell Visual Formatting
        cell.backgroundColor = UIColor(red:0.05, green:0.05, blue:0.07, alpha:0)
        cell.textLabel?.textColor = UIColor.white
        cell.textLabel?.font = UIFont(name: "Raleway", size: 18)
        cell.accessoryType = UITableViewCellAccessoryType.disclosureIndicator

        return cell
    }

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

        filteredData = searchText.isEmpty ? data : data.filter { (item: String) -> Bool in
        return item.range(of: searchText, options: .caseInsensitive, range: nil, locale: nil) != nil
        }

        let tableView = UITableView()

        self.tableView.reloadData()
    }


    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "\(titles.count) Definitions"

        filteredData = data

}

}

1 个答案:

答案 0 :(得分:2)

您遗失了@IBOutlet的{​​{1}}。因此,当您引用tableView时,Swift认为您正在讨论以self.tableView开头的方法之一。

所以,在tableView中删除这一行:

searchBar(_:textDidChange:)

并为let tableView = UITableView() 添加一个插座并连接它:

tableView