我已经四处寻找,并且没有真正找到为什么会发生这种情况。基本上,我按照Jared Davison的教程https://www.youtube.com/watch?v=yupIw9FXUso来创建Table View Cells到多视图控制器。在他的例子中,一切都很完美,但出于某种原因,当你点击代码中的表格视图单元格时,单元格会以灰色突出显示。然后,当用户单击单独的表视图单元格时,将加载应由第一个表视图单元格加载的视图控制器。如果用户然后单击原始表视图单元格,则加载应该由第二个表视图单元格加载的页面。总之,所有视图控制器都加载了一个" click"后面。
以下是表格视图的代码:
//Feed Navigation Functions
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return elements.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 75
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "feedCell") as! FeedTableViewCell
cell.txtTitle.text = "The Fight Against \(elements[indexPath.row])"
cell.issueIcon.image = UIImage(named: "Issue Icons_\(elements[indexPath.row])")
return cell
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
let vcName = identities[indexPath.row]
let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
self.navigationController?.pushViewController(viewController!, animated: true)
}
更新:数组是一个简单的字符串数组,例如[One, Two, Three]
,数组中有6个字符串。
答案 0 :(得分:2)
当您选择一个单元格然后选择另一个单元格时,方法didDeselectRow
被调用,因此Vc被推送您实际想要实现didSelectRowAt
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vcName = identities[indexPath.row]
let viewController = storyboard?.instantiateViewController(withIdentifier: vcName)
self.navigationController?.pushViewController(viewController!, animated: true)
// this to deSelect it after push
tableView.deselectRow(at: indexPath, animated: false)
}
选择单元格时会触发此方法
func tableView(_ tableView:UITableView,didSelectRowAt indexPath:IndexPath
取消选择单元格时触发此方法
func tableView(_ tableView:UITableView,didDeselectRowAt indexPath:IndexPath
答案 1 :(得分:1)
问题:click on a table view cell in my code the cell is highlighted in grey
这是由selectionStyle
引起的,您可以阅读here。如果您不希望突出显示该单元格,则可以设置cell.selectionStyle = .none
。
编辑:正如其他正确答案所示 - 问题是方法中的错误/拼写错误 - 我们应该使用didSelectRowAt
而不是didDeselectRowAt
。
答案 2 :(得分:1)
你想使用tableView的委托方法didSelectRow
而不是didDeselectRow
我认为......