Я попытался поместить панель поиска в первую строку своих ячеек TableView, но это только выдает ошибку, но я не понимаю почему, может кто-нибудь сказать мне, что делать? Заранее спасибо!

// Пользовательская ячейка

class SearchCell: UITableViewCell, UISearchBarDelegate {
    
    let searchbar = UISearchBar()
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        addSubview(searchbar)
        
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    func setConstraints() {
        searchbar.placeholder = "Country, City"
        searchbar.delegate = self
        searchbar.searchBarStyle = .minimal
        
        //Constraints
        searchbar.translatesAutoresizingMaskIntoConstraints = false
        searchbar.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
        searchbar.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 10).isActive = true
        searchbar.widthAnchor.constraint(equalToConstant: 280).isActive = true
        searchbar.heightAnchor.constraint(equalToConstant: 40).isActive = true
    }
    
   
    override func awakeFromNib() {
        super.awakeFromNib()
        setConstraints()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

И это ViewController, который содержит TableView:

class SearchViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.row == 0 {
!Line 20!        let cell = tableView.dequeueReusableCell(withIdentifier: "SearchCell") as! SearchCell
            return cell
        } else {
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
            return cell
    }
    }

let tableView = UITableView()
        
    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.dataSource = self
        tableView.delegate = self
        
        
//        
        view.backgroundColor = .white
        navigationController?.navigationBar.prefersLargeTitles = true
        navigationItem.title = "Search"
        
        //Functions
        configureTableView()
    }
    
    
    
    func configureTableView() {
        view.addSubview(tableView)
        tableView.rowHeight = 80
        
        //Constraints
        tableView.translatesAutoresizingMaskIntoConstraints = false
        tableView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        tableView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
        tableView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true
        tableView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
    }
        
        
        
    
}

Я просмотрел несколько уроков и т. Д., Но они мне не помогли, так что спасибо, ребята!

-1
user14730646 26 Фев 2021 в 10:01

1 ответ

Лучший ответ

Сначала вам нужно зарегистрировать свою ячейку с ее reuseIdentifier с вашим tableview. Я не вижу этого в опубликованном вами коде.

После super.viewDidLoad() добавьте что-нибудь вроде

tableView.register(SearchCell.self, forCellReuseIdentifier: "SearchCell")

0
Emiel 26 Фев 2021 в 08:23