Я пытаюсь создать строку поиска в моем представлении таблицы, но у меня есть ошибка при попытке написать что-нибудь в строке поиска. Ошибка (завершение действия приложения для исключения исключений «NSInternalInconsistencyException», причина: «неспособность деактивировать ячейку с идентификатором cell1 - должна зарегистрировать ниб или класс для идентификатора или подключить ячейку прототипа в раскадровке»), я делаю класс в своей ячейке и используйте его идентификатор как (cell1), но все же ту же ошибку, может ли кто-нибудь помочь мне решить эту проблему с помощью Swift 3.Ошибка в SearchBar при попытке написать что-то с помощью swift3
Это мой код:
import UIKit
class ProgrTable: UIViewController , UITableViewDataSource , UITableViewDelegate , UISearchBarDelegate {
@IBOutlet weak var ProgTable: UITableView!
@IBOutlet weak var searchBar: UISearchBar!
var searchActive : Bool = false
var filtered:[String] = []
var ProgArray = [UIImage]()
var ProgTitle = [String]()
override func viewDidLoad() {
super.viewDidLoad()
searchBar.delegate = self
ProgTable.dataSource = self
ProgTable.delegate = self
ProgArray = [UIImage(named :"1")!,UIImage(named :"1")!,UIImage(named :"1")!,UIImage(named :"1")!,UIImage(named :"1")!,UIImage(named :"1")!,UIImage(named :"1")!,UIImage(named :"1")!]
ProgTitle = ["ssss ","kkkkkkk","vvvvvvv","yyyyyy","uuuuuu","eeeee","rrrrr","hhhhh","ggggg","fffff","dddd"]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
searchActive = true;
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filtered = ProgTitle.filter({ (text) -> Bool in
let tmp: NSString = text as NSString
let range = tmp.range(of: searchText, options: NSString.CompareOptions.caseInsensitive)
return range.location != NSNotFound
})
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.ProgTable.reloadData()
}
func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
if(searchActive) {
return filtered.count
}
return ProgArray.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell1" , for: indexPath) as! ProgrCell
if(searchActive){
cell.progLable.text = filtered[indexPath.row]
} else {
cell.progLable.text = ProgTitle[indexPath.row]
cell.progImage.image = ProgArray[indexPath.row]
}
return cell
}
}
Это мой код ячейки:
import UIKit
класс ProgrCell: UITableViewCell {
@IBOutlet weak var progLable: UILabel!
@IBOutlet weak var progImage: UIImageView!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
. Определите идентификатор ячейки в IB как «cell1». –
Не связано, но в наборе 'cellForRowAt' 'cell.progImage.image'' 'UIImage()', когда 'searchActive' является' true'. –
Пожалуйста, проверьте вопрос после обновления. –