gpt4 book ai didi

swift - 尝试启动 UIViewController 和 MapKit

转载 作者:行者123 更新时间:2023-11-28 13:55:34 24 4
gpt4 key购买 nike

所以我正在尝试制作一个日历应用程序。在此应用程序中,它允许用户在他们的事件中放置一个位置以获取旅行时间(类似于 iOS map 的操作方式。)但是,我在填充 TextField 下的 ListView 时遇到问题...下面是代码和结果。

更新ListView的代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
cell = self.tableView.dequeueReusableCell(withIdentifier: "cell") as! CustomTableViewCell
let request = MKLocalSearch.Request()
request.naturalLanguageQuery = locationSearchTextField.text
request.region = mapKitView.region
let search = MKLocalSearch(request: request)
search.start(completionHandler: {(response, error) in
if error != nil{
print("Error occured during search:")
print(error!.localizedDescription)
numberOfResults = 0
tableView.isHidden = true
return
}else if response!.mapItems.count == 0{
print("No results found")
numberOfResults = 0
tableView.isHidden = true
return
}else{
print("Results found")
matchingItems = (response?.mapItems)!
numberOfResults = matchingItems.count
tableView.numberOfRows(inSection: numberOfResults)
print(numberOfResults)
let indexRow = indexPath.row
let matchingItemsCount = matchingItems.count
if(matchingItemsCount > indexRow){
cell.nameLabel.text = matchingItems[indexRow].placemark.name
}else{
return
}
}
})
return cell
}

跟踪用户何时编辑 TextField 的代码(此代码用于更新 ListView):

@IBAction func locationTextFieldChanged(_ sender: Any) {
tableView.reloadData()
tableView.isHidden = false
}

结果: result

最佳答案

尝试在外部函数中进行此调用,例如:每次调用时,如果有结果,请更新数组,然后在最后调用 tableView.reloadData(),这样它就会为您创建必要的单元格。

func makeSearchCall() {
let request = MKLocalSearch.Request()
request.naturalLanguageQuery = locationSearchTextField.text
request.region = mapKitView.region
let search = MKLocalSearch(request: request)
search.start(completionHandler: {(response, error) in
if error != nil{
print("Error occured during search:")
print(error!.localizedDescription)
numberOfResults = 0
tableView.isHidden = true
return
}else if response!.mapItems.count == 0{
print("No results found")
numberOfResults = 0
tableView.isHidden = true
return
}else{
print("Results found")
matchingItems = (response?.mapItems)!
numberOfResults = matchingItems.count
tableView.numberOfRows(inSection: numberOfResults)
tableView.reloadData()
}
})
}

然后在您的cellForRowAt 方法中:

guard let cell = self.tableView.dequeueReusableCell(withIdentifier: "cell") as? CustomTableViewCell else {return UITableViewCell()}
cell.nameLabel.text = matchingItems[indexPath.row].placemark.name
return cell

同样在您的 numberOfRowsInSection 方法中:

return matchingItems.count

关于swift - 尝试启动 UIViewController 和 MapKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53918274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com