gpt4 book ai didi

ios - 搜索处于事件状态时 didSelectRowAt indexPath 函数不起作用

转载 作者:行者123 更新时间:2023-11-30 11:31:44 29 4
gpt4 key购买 nike

我正在尝试进行搜索并点击其中一个单元格以显示 AlertView。这个alertView要求添加到数组中。我正在使用 didSelectRowAt indexPath 函数和搜索函数。在进行任何搜索之前,一切正常。但是,如果搜索处于事件状态,搜索栏可以正常工作,但点击的单元格不会显示警报 View 。我认为 didSelectRowAt indexPath 函数有问题。

这是我的搜索功能:

    func updateSearchResults(for searchController: UISearchController) {
if searchController.searchBar.text != "" {
filteredData.removeAll(keepingCapacity: false)
let textToSearch = searchController.searchBar.text!
filteredData = mainArray.filter({($0.names?.lowercased().contains(textToSearch.lowercased()))!})
listTableView.reloadData()
}
else {
filteredData.removeAll(keepingCapacity: false)
listTableView.reloadData()
}
}

这是 didSelectRow 函数:

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let alertController = UIAlertController(title: "Alert", message: "Add To array?", preferredStyle: .alert)
let yesAction = UIAlertAction(title: "Yes", style: .default) { (action) -> Void in
if self.resultSearchController.searchBar.text != "" {
self.secondArray.append(self.filteredData[indexPath.row])
}
else {
self.secondArray.append(self.mainArray[indexPath.row])
}
print(self.secondArray)
}
let noAction = UIAlertAction(title: "No", style: .default) { (action) -> Void in
print("Do not append")
}
alertController.addAction(yesAction)
alertController.addAction(noAction)
if self.presentedViewController == nil {
self.present(alertController, animated: true, completion: nil)
}
}

这是cellForRowAt函数。我知道这看起来很复杂。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier: String = "BasicCell"
let myCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! MyTableCell
//Label1
if resultSearchController.searchBar.text != "" {
let item: LocationModel = filteredData[indexPath.row]
let desenNoToString = item.DesenNo
let desenString = "\(desenNoToString)"
let regex = try! NSRegularExpression(pattern:"\"(.*)\"")
if let match = regex.firstMatch(
in: desenString, range:NSMakeRange(0,desenString.utf16.count)) {
let result = (desenString as NSString).substring(with: match.range(at:1))
myCell.label1!.text = result
}
//Label2
let dolarToString = item.Dolar
let dolarString = "\(dolarToString)"
if let match = regex.firstMatch(
in: dolarString, range:NSMakeRange(0,dolarString.utf16.count)) {
let result = (dolarString as NSString).substring(with: match.range(at:1))
myCell.label2!.text = result
}
//Label3
let zeminToString = item.Zemin
let zeminString = "\(zeminToString)"
if let match = regex.firstMatch(
in: zeminString, range:NSMakeRange(0,zeminString.utf16.count)) {
let result = (zeminString as NSString).substring(with: match.range(at:1))
myCell.label3!.text = result
}
//Label4
let renkToString = item.Renk
let renkString = "\(renkToString)"
if let match = regex.firstMatch(
in: renkString, range:NSMakeRange(0,renkString.utf16.count)) {
let result = (renkString as NSString).substring(with: match.range(at:1))
myCell.label4!.text = result
}
//Label5
let enToString = item.En
let enString = "\(enToString)"
if let match = regex.firstMatch(
in: enString, range:NSMakeRange(0,enString.utf16.count)) {
let result = (enString as NSString).substring(with: match.range(at:1))
myCell.label5!.text = result
}
//Label6
let euroToString = item.Euro
let euroString = "\(euroToString)"
if let match = regex.firstMatch(
in: euroString, range:NSMakeRange(0,euroString.utf16.count)) {
let result = (euroString as NSString).substring(with: match.range(at:1))
myCell.label6!.text = result
}
}else {
let item: LocationModel = feedItems[indexPath.row]
let desenNoToString = item.DesenNo
let desenString = "\(desenNoToString)"
let regex = try! NSRegularExpression(pattern:"\"(.*)\"")
if let match = regex.firstMatch(
in: desenString, range:NSMakeRange(0,desenString.utf16.count)) {
let result = (desenString as NSString).substring(with: match.range(at:1))
myCell.label1!.text = result
}
//Label2
let dolarToString = item.Dolar
let dolarString = "\(dolarToString)"
if let match = regex.firstMatch(
in: dolarString, range:NSMakeRange(0,dolarString.utf16.count)) {
let result = (dolarString as NSString).substring(with: match.range(at:1))
myCell.label2!.text = result
}
//Label3
let zeminToString = item.Zemin
let zeminString = "\(zeminToString)"
if let match = regex.firstMatch(
in: zeminString, range:NSMakeRange(0,zeminString.utf16.count)) {
let result = (zeminString as NSString).substring(with: match.range(at:1))
myCell.label3!.text = result
}
//Label4
let renkToString = item.Renk
let renkString = "\(renkToString)"
if let match = regex.firstMatch(
in: renkString, range:NSMakeRange(0,renkString.utf16.count)) {
let result = (renkString as NSString).substring(with: match.range(at:1))
myCell.label4!.text = result
}
//Label5
let enToString = item.En
let enString = "\(enToString)"
if let match = regex.firstMatch(
in: enString, range:NSMakeRange(0,enString.utf16.count)) {
let result = (enString as NSString).substring(with: match.range(at:1))
myCell.label5!.text = result
}
//Label6
let euroToString = item.Euro
let euroString = "\(euroToString)"
if let match = regex.firstMatch(
in: euroString, range:NSMakeRange(0,euroString.utf16.count)) {
let result = (euroString as NSString).substring(with: match.range(at:1))
myCell.label6!.text = result
}
}
return myCell
}

希望大家能帮助我。

编辑:仍然有问题。有什么建议吗?

最佳答案

在 DidSelectRowAtIndexPath 处,

错误:

if self.presentedViewController == nil {
self.present(alertController, animated: true, completion: nil)
}

只需替换为:

self.present(alertController, animated: true, completion: nil)

描述:对于正常情况,当您点击任何表格 View 单元格时,不会出现任何 Controller 。所以“self.presentedViewController == nil”始终为真。

但是,在搜索任何值时,总是会出现 UISearchbar Controller 。所以条件永远是假的。

我们可以呈现警报 View ,甚至在呈现的 Controller 上。所以不需要检查这样的情况。

关于ios - 搜索处于事件状态时 didSelectRowAt indexPath 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50184444/

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