Ios 如何通过点击导航栏按钮在tableView部分显示和隐藏标题?

Ios 如何通过点击导航栏按钮在tableView部分显示和隐藏标题?,ios,swift,uitableview,Ios,Swift,Uitableview,使用Xcode 9.3版开发iOS应用程序,Swift 您能告诉我如何通过点击导航栏按钮来显示和隐藏(切换)tableView部分的标题吗 搜索栏放在节的标题中,使其在滚动tableview时始终可见 我想在初始显示中隐藏搜索栏 点击导航栏按钮,显示和隐藏搜索栏 代码和屏幕截图如下 代码 import UIKit class TableViewController: UITableViewController, UISearchBarDelegate { let array =

使用Xcode 9.3版开发iOS应用程序,Swift

您能告诉我如何通过点击导航栏按钮来显示和隐藏(切换)tableView部分的标题吗

  • 搜索栏放在节的标题中,使其在滚动tableview时始终可见
  • 我想在初始显示中隐藏搜索栏
  • 点击导航栏按钮,显示和隐藏搜索栏
代码和屏幕截图如下

代码

import UIKit

class TableViewController: UITableViewController, UISearchBarDelegate {

    let array = ["apple", "orange", "melon", "banana", "peach"]
    let searchBar = UISearchBar()

    override func viewDidLoad() {
        super.viewDidLoad()

        let searchButton = UIBarButtonItem(title: "Search", style: UIBarButtonItemStyle.plain, target: self, action: #selector(searchTapped))
        self.navigationItem.leftBarButtonItem = searchButton
    }

    @objc func searchTapped() {
        // If searchBar is hidden, then show a searchBar.

        // If searchBar is shown, then hide a searchBar.

    }

    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        searchBar.delegate = self
        searchBar.placeholder = "Search..."
        searchBar.showsCancelButton = true
        return searchBar
    }

    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        searchBar.sizeToFit()
        return searchBar.frame.height
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return array.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = array[indexPath.row]
        return cell
    }

}
屏幕截图


您可以使用
UITableViewDelegate
方法中的
tableView:heightForHeaderInSection:
。如下

override viewDidLoad() {
     super.viewDidLoad()
     yourBarButtonTapped = false

     //rest of your code
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
     return yourBarButtonTapped ? 0.1 : current_height
}

@IBAction func barButtonTapped() {
     yourBarButtonTapped = true
     yourTableView.reloadData()
}
您可以这样做:

@objc func searchTapped() {
    // If searchBar is hidden, then show a searchBar.
    tableView.tableHeaderView = self.searchBar;
    // If searchBar is shown, then hide a searchBar.
    tableView.tableHeaderView = nil;
    tableView.reloadData();
}
或者你可以定义:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

// if you don't need header then return nil or return uiview for header...

}

如果要隐藏搜索栏,请记住将节标题的高度保持为0.1。保持身高0不起作用。

问题解决了,我可以做我想做的事。非常感谢你的帮助!问题解决了,我可以做我想做的事。非常感谢你的帮助@TakeYourMark:随时:)
var hideSearchBar = false     // Class global var

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
     return hideSearchBar ? 0.1 : searchBarHeight
}  

@IBAction func search(sender: UIBarButtonItem) {
     hideSearchBar = !hideSearchBar
     tableView.reloadData()
}