UI searchControllers для 2 списков - PullRequest
0 голосов
/ 27 октября 2018

Я оценил приложение своего учителя. Итак, на первом экране у меня есть предмет, например, математика, физика, французский и т. Д., И когда вы нажимаете на предмет, он дает вам список преподавателей этого предмета с их именами на втором экране. Моя проблема, я хочу реализовать searchController на втором экране, который является списком с именем учителя. Я хочу найти имя учителя в строке поиска, но ничего не могу вернуть.

вот мой код для контроллеров второго экрана, который содержит мой searchController

import UIKit

extension ChooseTeachersViewController: UISearchResultsUpdating {
    func updateSearchResults(for searchController: UISearchController) {

        filterContentForSearchText(searchController.searchBar.text!)
    }
}

class ChooseTeachersViewController: UITableViewController {

    var listOfSubject: listOfSubjects!
    var list: [listOfSubjects] = []
    var listTeacher: [listOfTeachers] = [] // new code
    let searchController = UISearchController(searchResultsController: nil)

    var filteredListOfTeacher = [listOfTeachers]()// filtered list for the teacher when using the searchBar

    func searchBarIsEmpty() -> Bool {
        //return true if the text is empty
        return searchController.searchBar.text?.isEmpty ?? true
    }

    func isFiltering() -> Bool {
        return searchController.isActive && !searchBarIsEmpty()
    }

    func filterContentForSearchText(_ searchText: String, scope: String = "All"){


        filteredListOfTeacher = filteredListOfTeacher.filter({( listTeacher : listOfTeachers) -> Bool in
        return listTeacher.nameOfteacher.lowercased().contains(searchText.lowercased())
        })

     tableView.reloadData()
    }





    override func viewDidLoad() {
        super.viewDidLoad()

        let titlePage: String = "Select a \(listOfSubject.nameOfSubject) teacher"
        self.navigationItem.title = titlePage  // new code
        // Do any additional setup after loading the view, typically from a nib.

        //searchbar UI
        searchController.searchResultsUpdater = self
        searchController.obscuresBackgroundDuringPresentation = false
        searchController.searchBar.placeholder = "Search a \(listOfSubject.nameOfSubject) teacher"
        navigationItem.searchController = searchController
        definesPresentationContext = true

        //tableView.tableHeaderView = searchController.searchBar
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // return the list of item that was filered by the seachBar
        if isFiltering() {
            return listOfSubject.filteredListOfTeacher.count
        }

        return listOfSubject.teachers.count
    }
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "course", for: indexPath)

        let listTeachers: listOfTeachers

        if isFiltering() {
            listTeachers = listOfSubject.filteredListOfTeacher[indexPath.row]
        } else {
            listTeachers = listOfSubject.teachers[indexPath.row]
        }

        //let teacher = listOfSubject.teachers[indexPath.row]

        configureSubject(for: cell, with: listTeachers)
        return cell
    }
    //method that sets the subject item text on the cell label
    func configureSubject(for cell: UITableViewCell, with subject: listOfTeachers){

        let label = cell.viewWithTag(1000) as! UILabel
        label.text = subject.nameOfteacher

    }
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let listOfTeacher = listOfSubject.teachers[indexPath.row] // new code
        performSegue(withIdentifier: "showTeacherPage", sender: listOfTeacher)
    }


    //segue not connected to teacherPageViewController;
    //TODO make the connection when the add comment is fixed.
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "showTeacherPage" {
            let controller = segue.destination as! teacherPageViewController
            controller.listOfTeacher = sender as? listOfTeachers
        }
    }



}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...