搜索功能在透明的 UITableView 中实现,但它不工作。任何帮助表示赞赏
Search Functionality Implemented in a transparent UITableView but it is not working. Any help is appreciated
` 这是我用代码实现搜索功能的代码。没有使用故事板。
我 运行 该程序并看到了搜索栏。
我尝试搜索元素但没有出现。
我将代码调试为“PO Searching”-> 我得到的响应是“False”
所以我知道搜索功能代码没有在“索引路径处的行的单元格”中执行
我尽力调试代码。
我找不到代码中的错误。
我怎么解决这个问题?我哪里不见了。感谢任何帮助..
这是我用代码实现搜索功能的代码。没有使用故事板。
我 运行 该程序并看到了搜索栏。
我尝试搜索元素但没有出现。
我将代码调试为“PO Searching”-> 我得到的响应是“False”
所以我知道搜索功能代码没有在“索引路径处的行的单元格”中执行
我尽力调试代码。
我找不到代码中的错误。
我怎么解决这个问题?我哪里不见了。任何帮助表示赞赏..`
import UIKit
class Cell : UITableViewCell {
}
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate{
@IBOutlet weak var selectFruit: UIButton!
let transparentView = UIView()
let tableView = UITableView()
var button = UIButton()
var data = [String]()
var searchFruit = [String]()
var searching : Bool = false
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
// Register the Cell
tableView.register(Cell.self, forCellReuseIdentifier: "Cell")
}
// Adding the transparent View to show array elements
func addTransparentView(frame : CGRect) {
transparentView.frame = self.view.frame
self.view.addSubview(transparentView)
tableView.frame = CGRect(x: frame.origin.x, y: frame.origin.y + frame.height, width: frame.width, height: 0)
// Implementing Search bar functionality
var searchBar : UISearchBar = UISearchBar()
searchBar.sizeToFit()
searchBar = UISearchBar(frame: CGRect(x: 10, y: 20, width: tableView.frame.width-20, height: tableView.frame.height-20))
searchBar.searchBarStyle = UISearchBar.Style.prominent
searchBar.placeholder = " Search..."
searchBar.sizeToFit()
searchBar.isTranslucent = false
searchBar.backgroundImage = UIImage()
searchBar.delegate = self
self.view.addSubview(tableView)
tableView.addSubview(searchBar)
tableView.layer.cornerRadius = 5
transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.9)
tableView.reloadData()
let tapgesture = UITapGestureRecognizer(target: self, action: #selector(deleteTransparentView))
transparentView.addGestureRecognizer(tapgesture)
transparentView.alpha = 0
// Animating the transparent view
UIView.animate(withDuration: 0.4, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 1.0, options: .curveEaseInOut, animations: {
self.transparentView.alpha = 0.5
self.tableView.frame = CGRect(x: frame.origin.x, y: frame.origin.y + frame.height + 5, width: frame.width, height: CGFloat(self.data.count * 50))
}, completion: nil)
}
@objc func deleteTransparentView() {
let frame = button.frame
UIView.animate(withDuration: 0.4, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 1.0, options: .curveEaseInOut, animations: {
self.transparentView.alpha = 0
self.tableView.frame = CGRect(x: frame.origin.x, y: frame.origin.y + frame.height, width: frame.width, height: 0)
}, completion: nil)
}
// Action methods along with array elements
@IBAction func selectFruit(_ sender: Any) {
data = ["Apple","Apple1","Apple2","Apple3","Apple4","Oranges","Ape","Banana","Grapes","Kiwi","Kite","JackFruit"]
button = selectFruit
addTransparentView(frame: selectFruit.frame)
}
// MARK:- TableView Methods
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searching {
return searchFruit.count
} else {
return data.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
if searching {
cell.textLabel?.text = searchFruit[indexPath.row]
} else {
cell.textLabel?.text = data[indexPath.row]
}
return cell
}
func searchBar(_ searchBar: UISearchBar, textDidChange textSearched: String) {
searchFruit = data.filter({[=10=].prefix(textSearched.count) == textSearched})
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 50
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
button.setTitle(data[indexPath.row], for: .normal)
deleteTransparentView()
}
}
您必须设置 searching
为真并重新加载 table。
func searchBar(_ searchBar: UISearchBar, textDidChange textSearched: String) {
searchFruit = data.filter({[=10=].prefix(textSearched.count) == textSearched})
searching = !searchFruit.isEmpty
tableView.reloadData()
}
您必须在 textDidChange
中相应地设置 searching
并且有一种更有效的方法来过滤数据
func searchBar(_ searchBar: UISearchBar, textDidChange textSearched: String) {
if textSearched.isEmpty {
searching = false
searchFruit.removeAll()
} else {
searching = true
searchFruit = data.filter{[=10=].range(of: textSearched, options: [.caseInsenitive, .anchored]) != nil}
}
tableView.reloadData()
}
` 这是我用代码实现搜索功能的代码。没有使用故事板。 我 运行 该程序并看到了搜索栏。 我尝试搜索元素但没有出现。 我将代码调试为“PO Searching”-> 我得到的响应是“False” 所以我知道搜索功能代码没有在“索引路径处的行的单元格”中执行 我尽力调试代码。 我找不到代码中的错误。 我怎么解决这个问题?我哪里不见了。感谢任何帮助..
这是我用代码实现搜索功能的代码。没有使用故事板。 我 运行 该程序并看到了搜索栏。 我尝试搜索元素但没有出现。 我将代码调试为“PO Searching”-> 我得到的响应是“False” 所以我知道搜索功能代码没有在“索引路径处的行的单元格”中执行 我尽力调试代码。 我找不到代码中的错误。 我怎么解决这个问题?我哪里不见了。任何帮助表示赞赏..`
import UIKit
class Cell : UITableViewCell {
}
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate{
@IBOutlet weak var selectFruit: UIButton!
let transparentView = UIView()
let tableView = UITableView()
var button = UIButton()
var data = [String]()
var searchFruit = [String]()
var searching : Bool = false
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
// Register the Cell
tableView.register(Cell.self, forCellReuseIdentifier: "Cell")
}
// Adding the transparent View to show array elements
func addTransparentView(frame : CGRect) {
transparentView.frame = self.view.frame
self.view.addSubview(transparentView)
tableView.frame = CGRect(x: frame.origin.x, y: frame.origin.y + frame.height, width: frame.width, height: 0)
// Implementing Search bar functionality
var searchBar : UISearchBar = UISearchBar()
searchBar.sizeToFit()
searchBar = UISearchBar(frame: CGRect(x: 10, y: 20, width: tableView.frame.width-20, height: tableView.frame.height-20))
searchBar.searchBarStyle = UISearchBar.Style.prominent
searchBar.placeholder = " Search..."
searchBar.sizeToFit()
searchBar.isTranslucent = false
searchBar.backgroundImage = UIImage()
searchBar.delegate = self
self.view.addSubview(tableView)
tableView.addSubview(searchBar)
tableView.layer.cornerRadius = 5
transparentView.backgroundColor = UIColor.black.withAlphaComponent(0.9)
tableView.reloadData()
let tapgesture = UITapGestureRecognizer(target: self, action: #selector(deleteTransparentView))
transparentView.addGestureRecognizer(tapgesture)
transparentView.alpha = 0
// Animating the transparent view
UIView.animate(withDuration: 0.4, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 1.0, options: .curveEaseInOut, animations: {
self.transparentView.alpha = 0.5
self.tableView.frame = CGRect(x: frame.origin.x, y: frame.origin.y + frame.height + 5, width: frame.width, height: CGFloat(self.data.count * 50))
}, completion: nil)
}
@objc func deleteTransparentView() {
let frame = button.frame
UIView.animate(withDuration: 0.4, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 1.0, options: .curveEaseInOut, animations: {
self.transparentView.alpha = 0
self.tableView.frame = CGRect(x: frame.origin.x, y: frame.origin.y + frame.height, width: frame.width, height: 0)
}, completion: nil)
}
// Action methods along with array elements
@IBAction func selectFruit(_ sender: Any) {
data = ["Apple","Apple1","Apple2","Apple3","Apple4","Oranges","Ape","Banana","Grapes","Kiwi","Kite","JackFruit"]
button = selectFruit
addTransparentView(frame: selectFruit.frame)
}
// MARK:- TableView Methods
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searching {
return searchFruit.count
} else {
return data.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
if searching {
cell.textLabel?.text = searchFruit[indexPath.row]
} else {
cell.textLabel?.text = data[indexPath.row]
}
return cell
}
func searchBar(_ searchBar: UISearchBar, textDidChange textSearched: String) {
searchFruit = data.filter({[=10=].prefix(textSearched.count) == textSearched})
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 50
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
button.setTitle(data[indexPath.row], for: .normal)
deleteTransparentView()
}
}
您必须设置 searching
为真并重新加载 table。
func searchBar(_ searchBar: UISearchBar, textDidChange textSearched: String) {
searchFruit = data.filter({[=10=].prefix(textSearched.count) == textSearched})
searching = !searchFruit.isEmpty
tableView.reloadData()
}
您必须在 textDidChange
中相应地设置 searching
并且有一种更有效的方法来过滤数据
func searchBar(_ searchBar: UISearchBar, textDidChange textSearched: String) {
if textSearched.isEmpty {
searching = false
searchFruit.removeAll()
} else {
searching = true
searchFruit = data.filter{[=10=].range(of: textSearched, options: [.caseInsenitive, .anchored]) != nil}
}
tableView.reloadData()
}