- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经有一段时间可以使用 UISearchController
了,但是我有一个小问题。
我的搜索 Controller 显示数组中的火车站列表。 (它们有很多,所以我将在下面的示例代码中减少数组),这一切都很好,我很满意。
问题是我还需要将火车站 GPS 坐标与车站名称一起传递。我一直在努力研究最好的方法来做到这一点,但遇到了困难。
我决定创建另一个包含站点代码、站点、纬度和经度的数组。
这是原始数组:
let data = ["Abbey Wood", "Aber", "Abercynon", "Aberdare", "Aberdeen", "Aberdour", "Aberdovey", "Abererch"]
这是新数组:
let stations = [Station(code: "ABW", name: "Abbey Wood", latitude: 51.4907705898, longitude: 0.1203255703),
Station(code: "ABE", name: "Aber", latitude: 51.5749606879, longitude: -3.2298389345),
Station(code: "ACY", name: "Abercynon", latitude: 51.6447060012, longitude: -3.3270007535),
Station(code: "ABA", name: "Aberdare", latitude: 51.715057473, longitude: -3.4430991465),
Station(code: "ABD", name: "Aberdeen", latitude: 57.1430482477, longitude: -2.0974804963),
Station(code: "AUR", name: "Aberdour", latitude: 56.0545804403, longitude: -3.3005564433),
Station(code: "AVY", name: "Aberdovey", latitude: 52.543972227, longitude: -4.0570808351),
Station(code: "ABH", name: "Abererch", latitude: 52.8986004612, longitude: -4.3741959548)]
我还写了这个来配合新数组:
class Station {
var code = ""
var name = ""
var latitude = 0.0
var longitude = 0.0
init(code: String, name: String, latitude: Double, longitude: Double) {
self.code = code
self.name = name
self.latitude = latitude
self.longitude = longitude
}
}
问题是我无法将其实现到 UISearchController
中。
这完全是原始代码
var filteredData: [String]!
var searchController: UISearchController!
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
filteredData = data
// Initializing with searchResultsController set to nil means that
// searchController will use this view controller to display the search results
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
// If we are using this same view controller to present the results
// dimming it out wouldn't make sense. Should set probably only set
// this to yes if using another controller to display the search results.
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.searchBarStyle = .Minimal
searchController.searchBar.sizeToFit()
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.showsCancelButton = false
self.navigationItem.titleView = searchController.searchBar
// Sets this view controller as presenting view controller for the search interface
definesPresentationContext = true
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("TableCell") as! UITableViewCell
cell.textLabel?.text = filteredData[indexPath.row]
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
// let cell = tableView.cellForRowAtIndexPath(indexPath)!
selectedText = filteredData![indexPath.row]
self.performSegueWithIdentifier("unwindToSet", sender: self)
println("you pressed \(selectedText)")
println(indexPath.row)
}
func updateSearchResultsForSearchController(searchController: UISearchController) {
let searchText = searchController.searchBar.text
filteredData = searchText.isEmpty ? data : data.filter({(dataString: String) -> Bool in
return dataString.rangeOfString(searchText, options: .CaseInsensitiveSearch) != nil
})
tableView.reloadData()
}
}
无论我现在尝试做什么,我都无法将站名传递到 tableview,
我的做法是完全错误的,还是我在正确的轨道上,只是做了一些愚蠢的事情?
最佳答案
我试图重现您的问题并编写了这段代码。我只使用 UITableView
和 UISearchBar
只是为了保持代码干净。我更新了使用 Station
对象过滤数组的函数 (searchBar(_:textDidChange:)
,您应该在 updateSearchResultsForSearchController
中使用这部分代码函数)。
现在一切正常。
class Station {
var code = ""
var name = ""
var latitude = 0.0
var longitude = 0.0
init(code: String, name: String, latitude: Double, longitude: Double) {
self.code = code
self.name = name
self.latitude = latitude
self.longitude = longitude
}
}
class ViewController: UIViewController, UISearchBarDelegate {
@IBOutlet weak var tableView: UITableView!
var filteredData = [Station]()
let stations = [Station(code: "ABW", name: "Abbey Wood", latitude: 51.4907705898, longitude: 0.1203255703),
Station(code: "ABE", name: "Aber", latitude: 51.5749606879, longitude: -3.2298389345),
Station(code: "ACY", name: "Abercynon", latitude: 51.6447060012, longitude: -3.3270007535),
Station(code: "ABA", name: "Aberdare", latitude: 51.715057473, longitude: -3.4430991465),
Station(code: "ABD", name: "Aberdeen", latitude: 57.1430482477, longitude: -2.0974804963),
Station(code: "AUR", name: "Aberdour", latitude: 56.0545804403, longitude: -3.3005564433),
Station(code: "AVY", name: "Aberdovey", latitude: 52.543972227, longitude: -4.0570808351),
Station(code: "ABH", name: "Abererch", latitude: 52.8986004612, longitude: -4.3741959548)];
override func viewDidLoad() {
super.viewDidLoad()
filteredData = stations
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("TableCell") as! UITableViewCell
// Set name of station to textLabel
cell.textLabel?.text = filteredData[indexPath.row].name
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var selectedText = filteredData[indexPath.row].name
println("you pressed \(selectedText)")
println(indexPath.row)
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
//Filter through Station objects
filteredData = searchText.isEmpty ? stations : stations.filter({(station: Station) -> Bool in
return station.name.rangeOfString(searchText, options: .CaseInsensitiveSearch) != nil
})
tableView.reloadData()
}
}
关于ios - 使用 Swift 将更多数据传递到 UISearchController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30152698/
我正在开发一个带选项卡栏的 ios 应用程序。我的栏上有超过 5 个按钮,所以在 iphone 上我有更多的按钮。现在,假设我有这个按钮:Button1 Button2 Button3 Button4
我有一个带有 UITabBarController 的应用,其中有超过五个选项卡。 当我按更多选项卡时,我会转到moreNavigationController,它是一个UINavigationCon
我有一个导航 Controller 。 NAVC->MORE... 按钮,然后在“更多”下有一些额外的 VC。 如果我转到“更多...”下的 VC,然后转到不在“更多...”上的 VC,那么当我返回到
因此,我想出了这种方案,用于在多个线程同时具有读写访问权限的二叉树中旋转时锁定节点,这涉及每次旋转锁定四个节点,这似乎是一个很多吗?我想到了一种比我想出的方法更聪明的方法来减少所需的锁定,但谷歌并没有
所以我已经尝试了所有方法,但我似乎仍然无法将下拉内容与 dropbtn 对齐。我只希望内容始终位于更多菜单下方。 HTML: `
我正在尝试使用 expect 来自动接受在 --more-- 中提示的 EULA。 #!/usr/bin/expect spawn "./greenplum-perfmon-web-4.1.2.0-b
他们如何在下面提供的网站上制作“告诉我更多”效果。我读过 read more/less effect in jQuery,但我发现该站点的有趣之处在于,除非单击该按钮,否则无法滚动页面。 Effect
现在,Kim Stebel helped me understanding如何使用存在类型键入变量,我需要知道如何在继承中使用它们: 以下代码无法编译: class PagingListModel(s
在我的Cygwin中不可用。另一方面,提供了“ less”命令。也许Cygwin的制造商认为“更多”只是多余的。 我对此很好奇。 最佳答案 安装util-linux软件包,您将获得“更多”的信息 ht
基本上,我想知道是否有人有增加 DTU 与分片的经验。 DTU应该线性地提高性能。因此,如果您有 5 个 DTU,而您改为 10 个 DTU,那么(理论上)您应该获得大约两倍的性能。 因此,四个 SQ
我们使用 asp.net mvc、javascript 和 jQuery(托管在本地计算机上)创建了一个应用程序。基本设计是,当用户从一个页面导航到其他页面时,我们通过隐藏和显示 HTML 页面,将所
我想用 RMonad 做一些基本的事情。有没有办法使用“as monad”功能来 有一个身份 rmonad,可以应用 monad 转换器吗? 有诸如 StateT 变压器之类的常见东西吗? 向现有 m
我有一个 char*[] 数组。我需要能够为其分配字符串并再次删除它们,但我不知道: 如何检查一个元素中是否已经有一个字符串,这样我就不会覆盖它,如果它已经被占用,则继续处理下一个元素? 之后如何将其
基本上,我想知道是否有人有增加 DTU 与分片的经验。 DTU应该线性地提高性能。因此,如果您有 5 个 DTU,而您改为 10 个 DTU,那么(理论上)您应该获得大约两倍的性能。 因此,四个 SQ
我有一个程序可以同时吐出标准错误和标准输出,我想在标准错误上少运行寻呼机,但忽略标准输出。我该怎么做? 更新: 就是这样......我不想丢失标准输出......只是让它远离寻呼机 program 2
基本上,当单击具有类 "dropdown" 的链接时,我无法获取“更多...”链接来对下一个跨度的高度进行动画处理。它根本就没有动画。仅当更改为 Less... 链接并且单击 Less... 链接以折
我正在使用 ExtJS,并认为它是一个了不起的框架。但是,它们没有内置的状态图,这使得依赖于状态的应用程序开发非常痛苦。 我最近发现了这个: https://github.com/jakesgordo
我一直在研究数据结构和算法,遗憾的是在C中。我已经单独实现了一个双向链表,它保存整数并且工作正常,但是当节点(或pub)让它正常工作时我遇到了很多麻烦在本例中)保存多个不同类型的值。我可以创建一个列表
编辑拼写错误 你好, 这可能是一个愚蠢的问题,但如果它能帮助我遵循最佳实践,我不在乎:P 假设我想在 System.Data 命名空间...以及 System.Data.SqlClient 命名空间中
使用 bootstrap 3 CSS、font awesome CSS 和最新的 jQuery JS 文件。 我正在使用 javascript 在单击按钮时在另一个内容 div 之上隐藏/显示一个内容
我是一名优秀的程序员,十分优秀!