【发布时间】:2020-08-28 19:24:42
【问题描述】:
我有一个数组,我试图在按下按钮(导航栏按钮)时使用它来填充表格视图。我已经使用打印语句来验证是否存在正确的数据,但是我无法在按下按钮时显示表格行。
我认为问题在于我的 @IBAction func favoritesButton(_ sender: UIBarButtonItem) 语法,但现在确定如何解决。我错过了什么?
class ViewController: UIViewController {
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var tableView: UITableView!
var materialData = ["One", "Two", "Three", "Four", "Five"]
override func viewDidLoad() {
super.viewDidLoad()
print(favoritesData)
}
@IBAction func arrayList(_ sender: UIBarButtonItem) {
print(favoritesData)
}
@IBAction func favoritesButton(_ sender: UIBarButtonItem) {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.numberOfLines = 0
cell.textLabel?.text = favoritesData[indexPath.row]
print(favoritesData)
return cell
}
}
}
var searchMaterial = [String]()
var searching = false
var favoritesData = [String]()
extension ViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
print(self.materialData[indexPath.row], "selected!")
}
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let favorite = UITableViewRowAction(style: .default, title: "Favorite") { (action, indexPath) in
var data: String
if searching {
data = searchMaterial[indexPath.row]
print(searchMaterial[indexPath.row], "added to favorites")
} else {
data = self.materialData[indexPath.row]
print(self.materialData[indexPath.row], "added to favorites")
}
if let index = favoritesData.firstIndex(of: data) {
favoritesData.remove(at: index)
}
else {
favoritesData.append(data)
}
}
favorite.backgroundColor = UIColor.orange
return [favorite]
}
}
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searching {
return searchMaterial.count
} else {
return materialData.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.numberOfLines = 0
if searching {
cell.textLabel?.text = searchMaterial[indexPath.row]
} else {
cell.textLabel?.text = materialData[indexPath.row]
}
return cell
}
}
extension ViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchBar.setShowsCancelButton(true, animated: true)
searchMaterial = materialData.filter({$0.prefix(searchText.count) == searchText})
searching = true
tableView.reloadData()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchBar.setShowsCancelButton(false, animated: true)
searching = false
searchBar.text = ""
tableView.reloadData()
tableView.endEditing(true)
}
}
【问题讨论】:
-
当您按下收藏按钮时,您到底想做什么?
标签: ios arrays swift uitableview uibutton