我有一个困难的时间添加一个功能搜索栏顶部我的表视图。我的代码没有它,可以很好地选择大学,但是我需要一个搜索表来过滤大学列表。
我尝试添加一个搜索栏,我发现从网上资源,但他们最终使用数组的项目列表。我的代码没有以与我在TableView中显示的项相同的格式执行此操作。如果有一种方法可以添加搜索栏,而不需要为表视图中列出的项创建数组,那就太好了。
import UIKit
class MasterViewController: UITableViewController{
var detailViewController: DetailViewController? = nil
var objects = [Any]()
var UniName: [String] = ["The University of Texas at Austin", "Rice University", "Texas A&M University", "Baylor university", "The University of Texas at El Paso", "southern methodist university", "The University of Texas at Dallas", "Texas Tech University", "University of North Texas", "Texas A&M University-Commerce"]
var UniAddress: [String] = ["110 Inner Campus Drive Austin, TX 78705", "6100 Main St., Houston, TX 77005-1892", "Administration Building, 400 Bizzell St, College Station, TX 77843", "1311 S 5th St, Waco, TX 76706", "500 W University Ave, El Paso, TX 79968", "6425 Boaz Lane, Dallas, TX 75205", "800 W Campbell Rd, Richardson, TX 75080", "2500 Broadway, Lubbock, TX 79409", "1155 Union Cir, Denton, TX 76203", "2200 Campbell St, Commerce, TX 75428"]
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
navigationItem.leftBarButtonItem = editButtonItem
if let split = splitViewController {
let controllers = split.viewControllers
detailViewController = (controllers[controllers.count-1] as! UINavigationController).topViewController as? DetailViewController
}
}
override func viewWillAppear(_ animated: Bool) {
clearsSelectionOnViewWillAppear = splitViewController!.isCollapsed
super.viewWillAppear(animated)
}
// MARK: - Segues
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = tableView.indexPathForSelectedRow {
let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController
controller.setNewAddress(Member: UniName[indexPath.row], formap: UniAddress[indexPath.row])
controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
controller.navigationItem.leftItemsSupplementBackButton = true
}
}
}
// MARK: - Table View
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return UniName.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableViw.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel!.text = UniName[indexPath.row]
return cell
}
}
1条答案
按热度按时间ippsafx71#
你的问题很广泛,所以首先要做的事情。您可能应该首先从数据的模型定义开始。
这将清楚地将模型与控制器逻辑分离。
自定义表的最佳方法是不使用UITablewViewController,而是在UIViewController中使用UITableView和UISearchBar。如果使用故事板,它看起来像这样:
将搜索栏添加到UITableView的顶部位置非常重要。下面是视图控制器的样子。
正如您在
viewDidLoad
方法中看到的,我们添加了ViewController
作为表的dataSource和搜索栏的delegate,因此我们需要确保符合这些协议在这里,我们创建了一个逻辑来显示搜索结果或所有数据,这取决于搜索是否处于活动状态。
我们使用
UISearchBarDelegate
来确定用户何时在搜索栏中键入内容。完整代码here