如何从 UITableView 获取行索引,其中数组列表由追加到类
Posted
技术标签:
【中文标题】如何从 UITableView 获取行索引,其中数组列表由追加到类【英文标题】:How to get row index from UITableView which the array list made by append to a class 【发布时间】:2019-07-03 18:49:54 【问题描述】:如何从 UITableView 中获取行索引,该数组列表由附加到对象类。 我想根据对象的值获取行索引,我需要滚动到我只知道对象的值但不知道行索引的行。
以下是创建数组并显示到 UITableView 的代码。
let paging: Int
let obj: Any
var currentAyaPlaying: Int?
var listArr = [] as [Any]
override func viewDidLoad()
super.viewDidLoad()
tableView.estimatedRowHeight = 700
tableView.rowHeight = UITableView.automaticDimension
tableView.allowsSelection = true
if paging == Paging.SURA
let sura = obj as! Sura
listArr.append(Sura(sura.index, sura.start, sura.ayas, sura.type, sura.img, sura.name, sura.translate))
for aya in 1...sura.ayas
listArr.append(Mark(sura.index, aya))
else if (paging == Paging.JUZ)
let juz = obj as! Juz
for suras in juz.sura_start...juz.sura_end
let sura = MetaData().mSuras[suras - 1]
if juz.sura_start == suras
for aya in juz.aya_start...(juz.sura_end == suras ? juz.aya_end : sura.ayas)
listArr.append(Mark(suras, aya))
else if juz.sura_end == suras
listArr.append(Sura(sura.index, sura.start, sura.ayas, sura.type, sura.img, sura.name, sura.translate))
for aya in 1...juz.aya_end
listArr.append(Mark(suras, aya))
else
listArr.append(Sura(sura.index, sura.start, sura.ayas, sura.type, sura.img, sura.name, sura.translate))
for aya in 1...sura.ayas
listArr.append(Mark(suras, aya))
NotificationCenter.default.addObserver(self, selector: #selector(appearNotifAudioReload(_:)), name: NSNotification.Name(rawValue: NotifKey.actAudioReloadFromParentToChild), object: nil)
@objc func appearNotifAudioReload(_ notification: Notification)
guard let sura = notification.userInfo?["sura"] as? Int else return
guard let aya = notification.userInfo?["aya"] as? Int else return
print("sura: \(sura)")
print("aya: \(aya)")
self.currentAyaPlaying = aya
if paging == Paging.SURA
let indexPath = NSIndexPath(row: self.currentAyaPlaying!, section: 0)
tableView.scrollToRow(at: indexPath as IndexPath, at: .top, animated: true)
else if paging == Paging.JUZ
let IStackInHere = Mark(sura, aya) // how to get the row index from this data?
let indexPath = NSIndexPath(row: IStackInHere, section: 0)
tableView.scrollToRow(at: indexPath as IndexPath, at: .top, animated: true)
tableView.reloadData()
override func numberOfSections(in tableView: UITableView) -> Int
return 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return listArr.count
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
if (listArr[indexPath.row] as? Sura) != nil
tableView.register(UINib(nibName: identifierAyaHeader, bundle: Bundle.main), forCellReuseIdentifier: identifierAyaHeader)
let cell = tableView.dequeueReusableCell(withIdentifier: identifierAyaHeader, for: indexPath) as! AyaCellHeader
let data = listArr[indexPath.row] as! Sura
cell.configureWithData(data)
return cell
tableView.register(UINib(nibName: identifierAya, bundle: Bundle.main), forCellReuseIdentifier: identifierAya)
let cell = tableView.dequeueReusableCell(withIdentifier: identifierAya, for: indexPath) as! AyaCell
let data = listArr[indexPath.row] as! Mark
cell.configureWithData(data)
return cell
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
if (listArr[indexPath.row] as? Mark) != nil
tableView.deselectRow(at: indexPath, animated: false)
let mark = listArr[indexPath.row] as! Mark
showActionBottom(mark: mark)
我想在 func 中出现 paging == Paging.JUZ 的情况下获取它NotifAudioReload,我只是尝试通过以下方式获取它:
let index = listArr.firstIndex$0 === Mark(sura, aya)
但没有幸运和错误
“二元运算符'==='不能应用于'Any'类型的操作数和 '标记'"
我知道这个论坛不是为了解决我的编码问题,但现在我真的很困扰。
提前致谢。
【问题讨论】:
你说你收到一个错误。你能告诉我们错误是什么意思吗? "但没有幸运和错误" 另外,你能发布Mark
类/结构的代码吗?
嗨@Rengers,马克是结构。
嗨@Rengers:代码行中的错误是“二元运算符'==='不能应用于'Any'和'Mark'类型的操作数”
【参考方案1】:
您需要使用==
(等号)来比较相等性。假设 Mark 结构符合 Equatable
,您可以使用以下内容:
let index = listArr.firstIndex $0 as! Mark == Mark(sura, aya)
【讨论】:
您好,现在的错误是:“二元运算符 '==' 不能应用于两个 'Mark' 操作数”以上是关于如何从 UITableView 获取行索引,其中数组列表由追加到类的主要内容,如果未能解决你的问题,请参考以下文章
尝试从 iOS 中 UITableView 的自定义单元格内的 textField 获取活动单元格的索引