对成员 'tableView(_:didSelectRowAt:)' (Swift) 的引用不明确
Ambiguous reference to member 'tableView(_:didSelectRowAt:)' (Swift)
我正在尝试搜索显示在表视图中的数组,并且我正在遵循 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
}
}
您的 tableView
缺少 @IBOutlet
。因此,当您引用 self.tableView
时,Swift 认为您正在谈论以 tableView
.
开头的方法之一
所以,删除 searchBar(_:textDidChange:)
中的这一行:
let tableView = UITableView()
并为您的 tableView
添加一个插座并连接它:
@IBOutlet weak var tableView: UITableView!
我正在尝试搜索显示在表视图中的数组,并且我正在遵循 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
}
}
您的 tableView
缺少 @IBOutlet
。因此,当您引用 self.tableView
时,Swift 认为您正在谈论以 tableView
.
所以,删除 searchBar(_:textDidChange:)
中的这一行:
let tableView = UITableView()
并为您的 tableView
添加一个插座并连接它:
@IBOutlet weak var tableView: UITableView!