如何使用委托保存用户在变量中的输入?

时间:2017-09-25 15:04:54

标签: ios iphone swift tableview

我正在制作ios应用。请查看下面的表格视图。

enter image description here

如果单击添加(+)按钮,则可以在每个文本字段中添加ENG字及其含义韩文(KOR)。

enter image description here

填写文本字段并单击“保存”按钮(位于右上角,“저장”)后,将添加如下图所示的单词。

word is added

例如,ENG是无穷无尽的,意义(KOR)是“끝없는”。

而且,我想使用UIReferenceLibraryViewController。 如果我单击列表的单元格,我想显示其字典。

@IBAction func viewDictionary(_ sender: UITapGestureRecognizer) {

    let engDictionaryWord = **engListWord**
        let ViewController = UIReferenceLibraryViewController(term: engDictionaryWord)
        self.present(ViewController, animated: true, completion: nil)

} 

我想使用这种方法。 但是,我不知道如何在 engListWord 中保存我的ENG输入。

在pic2的swift文件(addWordViewController.swift)中,有这样的prepare()方法。

// This method lets you configure a view controller before it's presented.
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    super.prepare(for: segue, sender: sender)

    // Configure the destination view controller only when the save button is pressed.
    guard let button = sender as? UIBarButtonItem, button === saveButton else {
        os_log("The save button was not pressed, cancelling", log: OSLog.default, type: .debug)
        return
    }

    let eng = engTextField.text ?? ""
    let kor = korTextField.text ?? ""

    // Set the meal to be passed to WordTableViewController after the unwind segue.
    word = Word(eng:eng, kor:kor)
}
addWordViewController.swift中的

和viewDidLoad()方法

override func viewDidLoad() {
    super.viewDidLoad()

    engTextField.delegate = self
    korTextField.delegate = self

    // Set up views if editing an existing Word.
    if let word = word{
        engTextField.text = word.eng
        korTextField.text = word.kor
    }

    // Do any additional setup after loading the view.
}

我不知道我必须使用哪个变量。 我的项目中有其他swift文件,如果我误解了上面的代码,请告诉我!我会立即编辑我的问题。

enter image description here

Main.Storyboard

enter image description here

如果我使用GestureRecognizer,我制作了这段代码,但我不知道它是对的......

@IBAction func MyDictionary(_ sender: UITapGestureRecognizer) {

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "viewDictionary", sender: indexPath)
    }

    func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // I just made this identifier up, but create one yourself in the storyboard
        if segue.identifier == "viewDictionary" {
            // Define your vc
            let libController = segue.destination as! UIReferenceLibraryViewController

            // Define indexPath
            let indexPath = sender as! IndexPath

            // Set value in destination vc
            libController.engWord = words[indexPath.row].eng
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我认为要采用的方法是在WordTableViewController中使用UITableViewDelegate方法didSelectRowAtindexPath(如果这是带有表视图的类)。

在tableViewController中,gestureRecognizer似乎不是你想要的东西,因为它在委托方法中有很好的构建来注册用户按下。因此,请使用以下内容替换viewDictionary(_ :)函数:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    performSegue(withIdentifier: "viewDictionary", sender: indexPath)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // I just made this identifier up, but create one yourself in the storyboard
    if segue.identifier == "viewDictionary" {
       // Define your vc
       let libController = segue.destination as! UIReferenceLibraryViewController

       // Define indexPath
       let indexPath = sender as! IndexPath

       // Set value in destination vc
       libController.engWord = yourArrayOfEngWords[indexPath.row]       
    }
}

这将获取您按下的单元格的eng字,并将其保存到您在UIReferenceLibraryViewController中定义的属性“engWord”:

class UIReferenceLibraryViewController(){
     var engWord: String = ""

     // Rest your class properties and functions here...
}

一旦设置完毕,您可以在执行segue后随意使用它:=)