2

请原谅我无法自己解决这个问题。我在 Swift 学习了 iOS,并没有学到太多的 Objective-c。

我正在尝试构建一个uisearchbar过滤器,该视图通过由多个数组组成的分组表视图对其部分进行过滤。本质上,我需要过滤NSMutableArray构建的其他数组以获得我的搜索结果(普通数组无法在“合理的时间”内编译)。我看了一下这个教程,它得到了我需要的东西,但不幸的是,在这种情况下,在将 Obj-c 转换为 swift 时,我并不是最好的。非常感谢任何帮助(翻译)或对其他教程的指导,以帮助我做到这一点。我一直在寻找和寻找,整夜都在修补——但我已经屈服了,我需要一些帮助。

编辑:仍然没有回答

4

2 回答 2

1

它类似于objective-c代码,但让我们从这里开始

创建视图控制器、表格视图和搜索栏组件后,在 ViewController 类中,您必须将项目委托给 ViewController,例如:

tableView.delegate = self
tableView.dataSource = self
searchBar.delegate = self

然后你必须实现(覆盖)方法,比如

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

    filtered = data.filter({ (text) -> Bool in
        let tmp: NSString = text
        let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
        return range.location != NSNotFound
    })
    if(filtered.count == 0){
        searchActive = false;
    } else {
        searchActive = true;
    }
    self.tableView.reloadData()
}

在这里解释代表团

还有一个参考视频Youtube

希望能帮助到你

于 2015-05-18T09:26:53.317 回答
0

在您的类中添加这些 UISearchBarDelegate 方法,您的类必须使用代码self.yourSearchBar.delegate = self或情节提要确认此协议。

   func searchBarTextDidEndEditing(searchBar: UISearchBar) {
    searchBar.resignFirstResponder()
}


func searchBarCancelButtonClicked(searchBar: UISearchBar) {

    searchBar.text = ""
    searchBar.resignFirstResponder()
    self.searchedArrayToDisplay = self.listDataArray
}


func searchBarSearchButtonClicked(searchBar: UISearchBar) {

    searchBar.resignFirstResponder()
}


func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

    if searchText == "\n" {

        searchBar.resignFirstResponder()
    } else if searchText == "" {

    self.searchedArrayToDisplay = self.listDataArray
    } else {

        self.filterContentForSearchText(searchText)
    }
}


func filterContentForSearchText(searchText: String) {

    self.searchedArrayToDisplay = self.listDataArray.filter({(eachObject: [String:AnyObject]) -> Bool in

        let name = eachObject["name"] as! String
        let stringMatch = name.lowercaseString.rangeOfString(searchText.lowercaseString)
        let result = stringMatch != nil ? true : false
        return result
    })
}

现在在单元格中用于索引路径方法

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {

        let cell : UITableViewCell = UITableViewCell(style:UITableViewCellStyle.Value1, reuseIdentifier:"cell")
        var object = self.searchedArrayToDisplay[indexPath.row]
}
于 2015-05-18T10:37:44.880 回答