검색 표시 줄이 있습니다. 이제 검색 텍스트가 배열의 항목과 일치하지 않을 때 표를 지우는 데 도움이 필요합니다. 빈 검색 창).결과가 일치하지 않을 때 검색 막대 필터가 표를 지우지 않습니다.
"일치하는 결과가 없습니다"와 같은 일치 항목이 발견되지 않으면 셀 중 하나에 메시지가 표시되기를 바랍니다. 나는이 검색 창 기능을 만드는 가장 좋은 방법은 아니라는 것을 알고
@IBOutlet var searchForTool: UISearchBar!
@IBOutlet var toolTable: UITableView!
var searchActive : Bool = false
{
didSet {
if searchActive != oldValue {
toolTable?.reloadData()
}
}
}
typealias Item = (data: String, identity: String)
var filtered: [Item] = []
var items: [Item] = [
(data: " Data1", identity: "A"), (data: " Data2", identity: "B")
]
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.setNavigationBarHidden(true, animated: false)
AppState.shared.category = "Alphabetical"
}
@IBAction func backButton(_ sender: Any) {
if let navController = self.navigationController {
for controller in navController.viewControllers {
if controller is ToolsViewController {
navController.popToViewController(controller, animated: true)
}
}
}
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filtered = items.filter { item in
item.data.localizedCaseInsensitiveContains(searchText)
}
searchActive = !filtered.isEmpty
self.toolTable.reloadData()
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if(searchActive) {
return filtered.count
}
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! CustomCell
cell.alphabeticalLabel.layer.masksToBounds = true
if(searchActive) {
cell.alphabeticalLabel.text = filtered[indexPath.row].data
cell.alphabeticalLabel.layer.cornerRadius = 10
} else {
cell.alphabeticalLabel.text = items[indexPath.row].data
cell.alphabeticalLabel.layer.cornerRadius = 10
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vcName: String
if searchActive {
vcName = filtered[indexPath.row].identity
} else {
vcName = items[indexPath.row].identity
}
let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
self.navigationController?.pushViewController(viewController!, animated: true)
}
}
,하지만 내가 잠시 동안 함께 일한지 무엇을 :
여기 내 코드입니다. 솔루션은별로 복잡하지는 않겠지 만, 난 그저 운이 좋지 않을뿐입니다.
도움을 주시면 감사하겠습니다. 검색 텍스트가 비어 있거나없는 경우
나는 나머지 로직이 예상대로 작동한다고 가정합니다. 'items.count' 대신에'! searchActive'가 있으면'numberOfRowsInSection'에 0을 반환하지 않는 것이 어떻습니까? 아니면 1을 반환하고 'cellForRowAtIndexPath'에서'alphabeticallyLabel'을 "No results found"로 설정하십시오? – leandrodemarco
@leandrodemarco, 문제는, 만약 내가 그렇게하면, 처음에는 테이블에 아무것도 입력하지 않을 때까지 테이블이 비어 있다는 것입니다. 테이블이 비어 있어야하는 유일한 타입은 검색 바에 잘못된 것이 입력되었을 때입니다. –