Панель поиска не работает, а выделение выделено серым цветом (я хочу, чтобы его не было)

#swift #select #tableview #selection #uisearchbar

#swift #выберите #просмотр таблицы #выделение #панель пользовательского поиска

Вопрос:

Моя панель поиска не работает, и я не уверен, почему. Я следил за онлайн-уроком. Ниже приведена фотография моего контроллера просмотра «Найти друзей» и код для контроллера просмотра.

Кроме того, несмотря на то, что в моей раскадровке для выбора установлено значение «Нет», на ios оно серое.

Не уверен, как исправить часть выбора. Исправлена панель поиска, и решение приведено в комментариях ниже.

Найти контроллер просмотра друзей

 import UIKit

class FindFriendsViewController: UIViewController {

    var users = [User]()

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var searchBar: UISearchBar!

    var searchItem = [String]()
    var searching = false

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.tableFooterView = UIView()
        tableView.rowHeight = 71

        let tap = UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:)))
        tap.cancelsTouchesInView = false
        self.view.addGestureRecognizer(tap)
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        UserService.usersExcludingCurrentUser { [unowned self] (users) in
            self.users = users

            DispatchQueue.main.async {
                self.tableView.reloadData()
            }
        }
    }
}

    extension FindFriendsViewController: UITableViewDataSource, UITableViewDelegate {


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        var usernamesArr = [String]()
        for user in users {
            usernamesArr.append(user.username)
        }

        if searching {
            return searchItem.count
        } else {
            return usernamesArr.count
        }
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "FindFriendsCell") as! FindFriendsCell

        let user = users[indexPath.row]

        var usernamesArr = [String]()
        for user in users {
            usernamesArr.append(user.username)
        }

        if searching {
            cell.usernameLabel?.text = searchItem[indexPath.row]
        } else {
            cell.usernameLabel?.text = usernamesArr[indexPath.row]
            cell.delegate = self
            configure(cell: cell, atIndexPath: indexPath)
        }
        return cell
    }

    func configure(cell: FindFriendsCell, atIndexPath indexPath: IndexPath) {
        let user = users[indexPath.row]

        cell.usernameLabel.text = user.username
        cell.followButton.isSelected = user.isFollowed
    }
}

    extension FindFriendsViewController: FindFriendsCellDelegate {
    func didTapFollowButton(_ followButton: UIButton, on cell: FindFriendsCell) {
        guard let indexPath = tableView.indexPath(for: cell) else { return }

        followButton.isUserInteractionEnabled = false
        let followee = users[indexPath.row]

        FollowService.setIsFollowing(!followee.isFollowed, fromCurrentUserTo: followee) { (success) in
            defer {
                followButton.isUserInteractionEnabled = true
            }

            guard success else { return }

            followee.isFollowed = !followee.isFollowed
            self.tableView.reloadRows(at: [indexPath], with: .none)
        }
    }
}

    extension FindFriendsViewController: UISearchBarDelegate {
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        var usernamesArr = [String]()
        for user in users {
            usernamesArr.append(user.username)
        }
        searchItem = usernamesArr.filter({$0.lowercased().prefix(searchText.count) == searchText.lowercased()})
        searching = true
        tableView.reloadData()
    }

    func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
        searching = false
        searchBar.text = ""
        tableView.reloadData()
    }
}
 

Комментарии:

1. Как именно это не работает? Что происходит, когда вы что-то вводите? Все строки исчезают? Или все имена пользователей остаются такими, какими они были до поиска?

2. Когда я что-то ищу, табличное представление остается прежним. Ничего не меняется.

3. Какой учебник? Это ваш код или код ваших друзей?

4. Пробовали ли вы использовать отладчик? Я думаю, это должно быть первым шагом, попробуйте проверить searchItem , заполняется ли массив, затем, если searching изменяется с false на true …. и т.д. и т.п. Кстати, ваш код для панели поиска выглядит нормально

5. Подождите nvm!! Забыл добавить «SearchBar.delegate = self» в viewDidLoad yayyy работает, спасибо, ребята