如果TableView没有结果显示“无结果”标签(2个计数)

时间:2017-04-29 08:13:21

标签: ios swift xcode uitableview count

我试图完成我的搜索功能,这是我唯一遗失的东西。基本上我想要的是当我的searchTableView没有任何结果时,标签会出现并说“没有结果”就像 WhatsApp

enter image description here

如果没有需要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
        }
    }

enter image description here

我遇到了很多错误。

3 个答案:

答案 0 :(得分:0)

根据我的说法,最好将backgroundView添加到tableView。

重装方法后:

tableview.reloadData()

写:

if results.count == 0{
tableview.backroundView = noDataLabel
}
搜索/获取数据时

tableview.backroundView = nil

答案 1 :(得分:0)

试试这个!

从故事板中取出一个UILable并输入UIview enter image description here

现在就这样使用!

@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
        }
}