我试图完成我的搜索功能,这是我唯一遗失的东西。基本上我想要的是当我的searchTableView
没有任何结果时,标签会出现并说“没有结果”就像 WhatsApp :
如果没有需要count
的结果,我知道如何设置标签并使其正确显示,但我不知道如何正确地将标签设置为isHidden
2 counts
没有结果需要等于0
。
numberOfRowsInSection:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == self.tableView {
return self.names.count
} else {
return self.filteredUsers.count
}
}
我需要self.names.count
和& self.filteredUsers.count
等于0,而我将写isHidden = false
标签我有:
BarsSearchNoResultsLabel = UILabel(frame: CGRect(x: 60, y: 70, width: 200, height: 50))
BarsSearchNoResultsLabel.textAlignment = .center
BarsSearchNoResultsLabel.text = "אין תוצאות"
BarsSearchNoResultsLabel.font = UIFont(name:"HelveticaNeue-Bold", size: 25.0)
BarsSearchNoResultsLabel.textColor = UIColor.lightGray
self.view.addSubview(BarsSearchNoResultsLabel)
那么如何让这段代码同时计算filteredUseres
& names
?:
if self.names.count == 0
//Needs to count self.filteredUsers.count == 0 as well !
{
self.BarsSearchNoResultsLabel.isHidden = false
return 0
} else {
self.BarsSearchNoResultsLabel.isHidden = true
return self.names.count;
//Needs to return both names & filteredUsers!
}
}
如果你能帮助我,真的很棒。
感谢您的帮助!
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
guard self.names.count !=0 && self.filteredUsers.count != 0 else {
self.BarsSearchNoResultsLabel.isHidden = false
return 0
}
self.BarsSearchNoResultsLabel.isHidden = true
if tableView == self.tableView {
return self.names.count
} else {
return self.filteredUsers.count
}
}
我遇到了很多错误。
答案 0 :(得分:0)
根据我的说法,最好将backgroundView添加到tableView。
重装方法后:
tableview.reloadData()
写:
if results.count == 0{
tableview.backroundView = noDataLabel
}
搜索/获取数据时:
tableview.backroundView = nil
答案 1 :(得分:0)
试试这个!
现在就这样使用!
@IBOutlet weak var Notfound: UILabel!
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var SearchTableView: UITableView!
var searchActive : Bool = false
var data = ["San Francisco","New York","San Jose","Chicago","Los Angeles","Austin","Seattle"]
var filtered:[String] = []
override func viewDidLoad() {
super.viewDidLoad()
/* Setup delegates */
SearchTableView.delegate = self
SearchTableView.dataSource = self
searchBar.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
searchActive = true;
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText != ""{
filtered = data.filter({ (text) -> Bool in
let tmp: NSString = text as NSString
let range = tmp.range(of: searchText, options: .caseInsensitive)
return range.location != NSNotFound
})
if(filtered.count == 0){
searchActive = false;
Notfound.isHidden = false
SearchTableView.isHidden = true
} else {
searchActive = true;
Notfound.isHidden = true
SearchTableView.isHidden = false
}
SearchTableView.reloadData()
}else{
filtered = data
SearchTableView.isHidden = false
SearchTableView.reloadData()
}
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if(searchActive) {
return filtered.count
}
return data.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")! as UITableViewCell;
if(searchActive){
cell.textLabel?.text = filtered[indexPath.row]
} else {
cell.textLabel?.text = data[indexPath.row];
}
return cell;
}
答案 2 :(得分:0)
从架构的角度来看,我建议您显示/隐藏更新数据源阵列的标签;这样,只有在知道数据发生变化时才执行代码并显示/隐藏标签。代码也是作为更新数据的直接结果执行的,而不是重新加载tableview的副作用。
但是,如果您想在numberOfRowsInSection
中执行此操作,可以使用以下内容:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let namesCount = self.names?.count ?? 0
let filteredCount = self.filteredUsers?.count ?? 0
guard namesCount != 0 && filteredCount != 0 else {
self.BarsSearchNoResultsLabel.isHidden = false
return 0
}
self.BarsSearchNoResultsLabel.isHidden = true
if tableView == self.tableView {
return self.names.count
} else {
return self.filteredUsers.count
}
}