我一直在使用TableView和UISearch栏创建和应用。单元格是可选择的,但问题是我有单元格预先形成segues如果它们被选中。
此代码:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if (indexPath.row == 0){
self.performSegueWithIdentifier("First", sender: tableView)
}
当用户完成过滤搜索时,这些单元格现在包含不同的文本。所以他们点击的东西就是错误的观点。如果Row等于我的数组中的特定Sting,那么他们是否可以使我的if语句成为上述。
我的数组:
var menu = ["first", "Second", "Third","Fourth", "Fifth", "Sixth"]
当用户没有进行搜索时,他们的单元格和文本匹配但是一旦用户进行搜索,单元格就会保留在与segue相同的位置,但单元格所具有的文本是不同的。
主要问题:单元格文本不等于搜索和过滤后应显示的右视图。无论细胞文本是什么,它们都只是在喋喋不休。
如果有人可以向我提供新代码或调整现有代码,那就太棒了。 如有任何问题,或者您需要和澄清,请向我询问。我的所有代码都很快。谢谢您的帮助!
新代码:
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
filtered = menu.filter({ (text) -> Bool in
let tmp: NSString = text
let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
return range.location != NSNotFound
let menu = ["First", "Second", "Third","Fourth", "Fifth", "Sixth"]
// when a search is done you check if your array contains the search result
if menu.contains(searchBar.text!) {
// you change the search to lowercase
// so keep all your segue identifiers with lowercase strings
let identifier = searchBar.text!.lowercaseString
// perform the segue
self.performSegueWithIdentifier(identifier, sender: tableView)
}
答案 0 :(得分:1)
所以你有了searchBar,当你进行搜索时,你会得到搜索中的关键字,那么你可以这样做:
// Your array
let menu = ["first", "Second", "Third","Fourth", "Fifth", "Sixth"]
// when a search is done you check if your array contains the search result
if menu.contains(searchBar.text) {
// you change the search to lowercase
// so keep all your segue identifiers with lowercase strings
let identifier = searchBar.text.lowercaseString
// perform the segue
self.performSegueWithIdentifier(identifier, sender: tableView)
}
<强>更新强>
如果您想要连续segue
,请执行以下操作
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let identifier = menu[indexPath.row]
self.performSegueWithIdentifier(identifier, sender: tableView)
更新2
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
let menu = ["first" , "Second", "Third","Fourth", "Fifth", "Sixth"]
// when a search is done you check if your array contains the search result
// if yes
if menu.contains(searchText.text!) {
// you change the saerchText to lowercase
// so keep all your segue identifiers with lowercase strings
let identifier = searchbar.text!.lowercaseString
// perform the segue
self.performSegueWithIdentifier("identifier", sender: tableView)
}
})
解决OP问题的最终解决方案
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.cellForRowAtIndexPath(indexPath)
let menu = ["first", "second", "third","fourth", "fifth", "sixth"]
// when a search is done you check if your array contains the search result
let identifier = cell?.textLabel?.text!.lowercaseString
if menu.contains(identifier!) {
// you change the search to lowercase
// so keep all your segue identifiers with lowercase strings
// perform the segue
self.performSegueWithIdentifier(identifier!, sender: tableView)
}
}
答案 1 :(得分:0)
当用户进行搜索时,结果是在新数组中排序还是数据在初始数组中排序?
如果数据在不同的数组中排序,您只需添加一个布尔标志,指示表视图何时需要使用过滤后的数组。所以在你的
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath:
}
你可以
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if (userHasSearch){
// Something with the filtered array of data
} else {
// Something with the initial array
}
希望这有帮助!