如何从另一个UIViewController(设置)更改分段控件标题

时间:2016-11-27 19:07:47

标签: ios swift

修改Current Code

所以我刚刚开始iOS开发,所以我决定制作一个Tip Calculator来学习Swift的基础知识和基础。我是70%的方式,但我觉得我在从另一个UIViewController引用数据时遇到了麻烦......

This is what my story board looks like.....

所以我有一个加载屏幕,点击按钮后它转到了Tip Calculator ...然后我有一个设置可以改变分段控制部分的标题。因此,如果我想将默认设置更改为(10%,15%,30%),我可以在“设置”上执行此操作。但是,我似乎无法弄清楚如何获取TextField.text并使其成为分段控制标题的标题。

This is the code for the Tip Calculator (2nd screen)

我有一个属于“设置”页面的ViewController3类,但它完全是空白的。

1 个答案:

答案 0 :(得分:0)

要将设置传递回第一个viewController,您可以使用从第一个viewController传递的闭包。

以下是如何执行此操作的示例。在prepare(for:)中,将闭包processTipSettings设置为指向处理函数。在这种情况下,changeSegmentLabels将采用提示设置并使其成为分段控件的标签。

当用户点击保存时,按钮的@IBAction将使用textFieldLabels中的值调用processTipSettingschangeSegmentLabels将更新分段控件中的标题。

<强> ViewController.swift:

import UIKit

class ViewController: UIViewController {

    @IBOutlet var tipsSegmentedController: UISegmentedControl!

    func changeSegmentLabels(labels: [String?]) {
        if labels.count == 3 {
            for i in 0..<3 {
                tipsSegmentedController.setTitle(labels[i], forSegmentAt: i)
            }
        }
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "settings" {
            if let dvc = segue.destination as? SettingsViewController {
                dvc.processTipSettings = changeSegmentLabels
            }
        }
    }

}

<强> SettingsViewController.swift

class SettingsViewController: UIViewController {

    @IBOutlet weak var tip1: UITextField!
    @IBOutlet weak var tip2: UITextField!
    @IBOutlet weak var tip3: UITextField!

    // Call this closure when Save is pressed.
    var processTipSettings: (([String?]) -> ())?

    @IBAction func saveSettings(_ sender: UIButton) {
        processTipSettings?([tip1.text, tip2.text, tip3.text])

        _ = self.navigationController?.popViewController(animated: true)
    }

}