- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 SearchBar 和 TableView 有一个非常奇怪的问题。我有一个带有此搜索栏的 map View ,您可以在搜索栏中搜索地点名称,我用数据库过滤名称,如果名称存在,它将添加到 TableView 中。我可以毫无问题地搜索它,但我遇到了两个奇怪的问题。如果我在 TableView 中获得 3-4 个值,如果我搜索第五个值,则该值将不会显示。我遇到的第二个问题是,如果我有类似的地名,并且我单击两个之一,如果我尝试第二次研究它,则表格 View 将仅显示我之前单击的名称,如果我尝试单击它第三次,我尝试研究它,桌面 View 不会显示它。(当我单击 TableView 上的值时,它会简单地在 map 上显示它。)
错误视频:https://streamable.com/e72wn
代码:
extension LocationSearchTable : UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
//print("updateSearchResults")
// *When user open the Search Bar and he doesn't type text or the text is very short this code clean the TableView.*
let searchText = searchController.searchBar.text
if searchText == nil || searchText!.isEmpty {
seenNames.removeAll()
matchingItems.removeAll()
self.tableView.reloadData()
}
guard let mapView = mapView else { return }
let request = MKLocalSearchRequest()
request.naturalLanguageQuery = searchText
request.region = mapView.region
let search = MKLocalSearch(request: request)
search.start { response, _ in
guard let response = response else {
return
}
for (index , name) in response.mapItems.enumerated() {
let item = response.mapItems[index]
if(checkIfNameExistInDB(key: String(name.name!)) != nil && !seenNames.contains(name.name!)){
matchingItems.append(item)
seenNames.insert(name.name!)
self.tableView.reloadData()
}
else {
print(name.name!)
}
}
}
}
}
TableView的代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")!
let selectedItem = matchingItems[indexPath.row].placemark
cell.textLabel?.text = selectedItem.name
cell.imageView?.image = imageWithImage(image: UIImage(named: "search_1x")!, scaledToSize: CGSize(width: 20, height: 20))
cell.detailTextLabel?.text = parseAddress(selectedItem: selectedItem)
return cell
}
在出现第一个名称的错误后,搜索栏看起来被阻止并且不搜索任何内容
最佳答案
您的第一个问题是由输入搜索词时产生的大量请求引起的,因为输入或删除的每个字符都会创建并启动一个新的 MKLocalSearch。为了验证这一点,我将类似您的代码的内容放在 Playground 中并进行了测试:
import PlaygroundSupport
import UIKit
import MapKit
PlaygroundPage.current.needsIndefiniteExecution = true
var searches = [MKLocalSearch]()
for i in 1...100 {
let request = MKLocalSearchRequest()
request.naturalLanguageQuery = "Via roma n. \(i), Roma"
let search = MKLocalSearch(request: request)
search.start { (response, error) in
guard error == nil else {
print("request \(i) finished with error \(error!.localizedDescription)")
return
}
guard let _ = response else {
print("request \(i) finished with no response")
return
}
print("request \(i) completed successfully!")
}
searches.append(search)
}
您将看到某些请求已完成,没有错误,而对于某些请求,您将收到
The operation couldn’t be completed. (MKErrorDomain error 3.)
这是 MKErrorLoadingThrottled。这个错误,根据Apple dev ,发生在
The data was not loaded because data throttling is in effect. This error can occur if an app makes frequent requests for data over a short period of time.
进一步根据Apple dev :
There are no request limits per app or developer ID, so well-written apps that operate correctly should experience no problems. However, throttling may occur in a poorly written app that creates extremely large numbers of requests.
所以最后,问题的解决方案可能是延迟搜索请求的开始,直到用户完成输入(您可以使用一个计时器,当用户在一段时间内没有按任何键盘键时触发) .)
PS:非常重要的是,请记住在开始新请求之前取消您之前的请求,否则您会遇到意想不到的行为
关于swift - 奇怪的TableView和SearchBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833507/
我的 SearchFragment 是另外两个 Fragment 的宿主 Fragment:SearchUsersFragment 和 SearchEventsFragment。我的组织方式是 Tab
tableView.tableHeaderView = UISearchDisplayController.searchBar;并调用 setContentInset: ; 当我滚动表格时,没有绘制
我一直在努力寻找答案,但也许我没有正确地询问谷歌,所以它是这样的:我的 Android 应用程序中有一个搜索 View ,其中有顶部菜单项作为搜索输入,等等。我点击放大镜,然后文本字段变为可编辑的搜索
我已经设置了 UISearchBar 的东西。但我收到错误消息。 Cannot assign value of type '[cellData]' to type '[String]' 这是代码 st
我正在疯狂地尝试让我的 IOS 搜索栏在 Iphone 上工作。我从远程服务器访问数据并填充内容文件。然后我做了一个过滤器,它创建了一个过滤后的内容文件。然后我执行 [self.tableView r
我有一个 tableView,其中填充了一个 String 类型的数组。字符串中的某些单词包含连字符 (-)。我知道我可以过滤一个 tableView 并在需要时让它删除这个字符。是否可以在搜索过程中
我有一个带有 SegmentedControl、UITableView 和 UISearchController 的 UIViewController。 SegmentedControl 位于主视图的
当我像这样将 searchBar 对象调用到 UISearchBar 委托(delegate)方法中时,它工作正常: -(void)searchBarSearchButtonClicked:(UISe
我的 SearchBar 有这段代码可以更改我的收藏 View : extension ProductsCollectionViewController : UISearchControllerDel
只是一些后见之明,让您了解我的问题。我目前正在为我在设备上保存了 GuestList CoreData 的事件编写 iOS 应用程序。 在 viewDidLoad 上,它会获取 coredata 对象
我正在按照本教程了解如何启动和运行 searchBar。 教程: https://www.raywenderlich.com/113772/uisearchcontroller-tutorial 我完
我正在尝试对我的应用实现搜索。以前看了好几个教程,都推荐把Search Bar放到Table Header: self.tableView.tableHeaderView = self.searchC
我的搜索栏有默认的灰色文本,但我希望它是白色文本。我无法弄清楚如何使用 swift 来更改范围栏文本颜色,而且您无法从 Storyboard 中执行此操作。我找到的最接近的是 searchBarOut
我刚刚在我的程序中添加了一个 ui 搜索栏,每次我重新运行该程序时,我都会收到错误消息 -[一般] 与守护程序的连接无效尽管如此,我的应用程序仍能完美运行,而且我似乎无法分辨出哪里出了问题。 有谁知道
我又会显得很傻了,但这总比发疯好!这是我的问题。我有一个 UISearchBar,其中有一个我想隐藏的scopeBar。我这样做: searchBar.showsScopeBar = NO; 我也调用
需要帮助来更正此代码。 我有一个带有餐厅名称和地址的核心数据应用程序,有一个搜索栏,它正在运行。我要添加的是一个 Index 和一个 IndexTitle,如下图(箭头)所示。 非常欢迎任何帮助。提前
我正在使用 SearchDisplayController 并希望将样式或色调应用于 searchBar。 但我注意到 SearchDisplayController 更改了我的 searchBar
我当前使用searchBar,我将左侧图标更改为自定义 UIImageView。当按下按钮时我想将其改回原来的搜索图标。 //my custom search iconBar searchBar.se
我在我的电视应用程序中使用自定义搜索屏幕,我的问题是我无法在启动 fragment 时将焦点设置在 SearchBar View 上。我尝试了以下方法: mSearchBar.setFocusable
我想在输入 edittext 内容的 ListView 行中搜索相关的 Row。 如何在 Listview 中获取行..请给我示例代码.. 谢谢 最佳答案 我假设您想根据您键入的 edittext 值
我是一名优秀的程序员,十分优秀!