我想使用 didSelectRowAt 将数组从 UITableView 显示到下一个 viewController

Posted

技术标签:

【中文标题】我想使用 didSelectRowAt 将数组从 UITableView 显示到下一个 viewController【英文标题】:I want to display Array from UITableView to the next viewController using didSelectRowAt 【发布时间】:2018-08-31 04:52:17 【问题描述】:

我希望 quizNumber 根据选择的单元格返回 quizNumberArray

例如,如果用户选择了第一个单元格,quizNumber 返回 1

UITableViewController 内部

let quizNumberArray = [1,2,3,4,5,6,7,8,9,10]
    var quizNum = Int()

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    let vc = storyboard?.instantiateViewController(withIdentifier: "toQuestionVC") as? QuestionVC
    quizNum = quizNumberArray[indexPath.row]

    override  func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if let identifier = segue.identifier 
        if identifier == "toQuestionVC" 
            let questionController = segue.destination as! QuestionVC
            questionController.quizNumber = quizNum

在下一个 ViewController 中

class QuestionVC : UIViewController 
    var quizNumber = Int()
    func updateQuestion()
        if quizNumber == 1 
            //.....
        
    

但是quizNumber 返回 0。

【问题讨论】:

当您推送到 QuestionVC 时?在 didselect 本身?? 不,使用 segue 所以你必须在那里传递价值或从 didselect 推送 我如何在那里传递价值? 您是否尝试过覆盖prepare 【参考方案1】:

试试这个代码:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
     let vc = storyboard?.instantiateViewController(withIdentifier: "toQuestionVC") as? QuestionVC
     vc?.quizNumber = quizNumberArray[indexPath.row]
     navigationController?.pushViewController(vc!, animated: true)


并删除 segue 以使用上述代码

【讨论】:

我是用segue传数据的,还有别的方法吗? @Tameem 但您只会在 didselect 中获得正确的值,所以我认为上述方法更好,否则您必须将索引保存在变量中并在 segue 中传递。 @Shazed 我有另一个数据要通过 segue,所以我尝试在 didSelectRowAt quizNum = quizNumberArray[indexPath.row] 的 var var quizNum = Int() 中保存索引,并在 func 中为 segue let questionController = segue.destination as! QuestionVC questionController.quizNumber = quizNum 做准备,但它不起作用 @Tameem 我认为这是因为它可能在 didselect 之前调用 segue 方法,所以在 didselect 本身中传递您想要的所有值。并删除转场 @Tameem Push 实际上已被弃用,我更喜欢你使用 show。

以上是关于我想使用 didSelectRowAt 将数组从 UITableView 显示到下一个 viewController的主要内容,如果未能解决你的问题,请参考以下文章

didSelectRowAt 更改所有行中的值

用户在 didSelectRowAt 方法中选择原始数据后如何显示视图控制器 4 秒

Swift UITableView 仅在我按下几秒钟时调用 didSelectRowAt

TableView didSelectRowAt IndexPath 没有被调用

从@IBDesignable UIView didSelectRowAt UITableView 导航到 ViewController

选择 UITableView 中的所有行,并在数组中附加标签