微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过 tableview 控制器将数据从结构传递到视图控制器?

如何解决如何通过 tableview 控制器将数据从结构传递到视图控制器?

在我的应用程序中,我试图通过我的表视图将数据从带有变量的结构传递到我的主视图控制器。我制作了一个数据模型来将我的变量传递给主视图控制器..

我的结构如下所示:

    Struct VocabBuilder {
var n1LevelVocab: [Vocab] = [Vocab(vocabTitle: "上達",vocabHiragana: "じょうたつ",englishTranslation: "Improvement",noOfTimesSeen: 0),Vocab(vocabTitle: "乗り越える",vocabHiragana: "のりこえる",englishTranslation: "To Push Through",Vocab(vocabTitle: "耐久性",vocabHiragana: "たいきゅうせい",englishTranslation: "Durability",noOfTimesSeen: 0)]
}

我将我的数据传递给我的主视图控制器,在同一个结构中使用这个函数

 mutating func returnAllWordDataForN1() -> (vocab:String,hiragana:String,englishTranslation:String,viewCount: Int) {
        
        n1LevelVocab[vocabNumber].incrementNoOfTimesSeen()
        //has to be mutating because structs are immutable and this is a var in the vocabInfo.swift file.
        
        return (n1LevelVocab[vocabNumber].vocabTitle,n1LevelVocab[vocabNumber].vocabHiragana,n1LevelVocab[vocabNumber].englishTranslation,n1LevelVocab[vocabNumber].noOfTimesSeen)
    }

我的主视图控制器中有一个函数可以将这些值加载到 UITextLabels 中:

func loadUI() {

        vocabBox?.text = vocabInfo.returnAllWordDataForN1().0            
        hiraganaBox?.text = vocabInfo.returnAllWordDataForN1().1
        hiraganaBox?.textColor = view.backgroundColor         
        englishTranslationBox?.text = vocabInfo.returnAllWordDataForN1().2           
        viewCount?.text = ("View Count: \(vocabInfo.returnAllWordDataForN1().3)")     
            correctOrIncorrectBox?.text = "Try and Remember!"
            correctOrIncorrectBox?.textColor = .white   
        }

我在 viewDidLoad 中调用这个函数,它显示结构中的所有数据没有问题。但是,我想在选择 tableview 单元格时分配这些函数中的每一个来加载。

let nLevelArray = ["N1","N2","N3","N4","N5"]

在我的 tableView 中,我已经设置了常用函数,例如部分中的行数和行单元格,但是当我尝试使用 performSegue 时,我无法让它调用视图中的函数确实加载了。

>
 override func prepare(for segue: UIStoryboardSegue,sender: Any?) {
        if let destination = segue.destination as? ViewController {
            let indexPath = self.tableView.indexPathForSelectedRow

 //destination.vocabBox?.text = testArray[indexPath!.row)]
            //destination.loadUI() = nLevelArray[indexPath?.row]
    }

我尝试过的事情: 我尝试从 indexPath 使用 didSelectRow,但是当我使用 navigationController pushToViewController 函数时,它正在加载我有两次的故事板文件。它仍然没有调用加载 ui 函数

我还尝试使用变量 var dataArray = Vocab 将我的结构变成一个变量以将其传递到 tableView 中,并尝试从数组中加载结构中的数据

   var levelSelected = [VocabBuilder().n1LevelVocab,VocabBuilder().n2LevelVocab,VocabBuilder().n3LevelVocab,VocabBuilder().n4LevelVocab,VocabBuilder().n5LevelVocab]

当我在模拟器上测试我的应用程序时,它只显示处于认状态的主故事板,没有加载任何数据。我在这里做错了什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。