如何从另一个 UIViewController 更改分段控件标题(设置)
Posted
技术标签:
【中文标题】如何从另一个 UIViewController 更改分段控件标题(设置)【英文标题】:How to change segmented control title from another UIViewController (Settings) 【发布时间】:2016-11-27 19:07:47 【问题描述】:编辑 Current Code
所以我刚刚开始 ios 开发,所以我决定制作一个小费计算器来学习 Swift 的基础知识和基础。我有 70% 的感觉,但是我无法从另一个 UIViewController 引用数据...
所以我有一个加载屏幕,在我单击按钮后它会转到提示计算器......然后我有一个可以更改分段控制部分标题的设置。因此,如果我想将默认设置更改为 (10%, 15%, 30%),我可以在“设置”中执行此操作。但是我似乎无法弄清楚如何获取 TextField.text 并将其作为分段控件标题的标题。
我有一个属于设置页面的 ViewController3 类,但它是完全空白的。
【问题讨论】:
您是否正在尝试将数据传递给下一个 viewController? 我正在尝试从“设置”中的 textFields 中获取数据以更改上一个 viewController 中分段控件的标题 如果你想previous传递数据,你应该使用delegation。你可能想检查this answer。 @JayPark,你是 Hokie 吗?我也是! @vacawama Hokies 团结起来!感谢您的回答...我正在尝试通过代表来解决,但它似乎不起作用,所以我会尝试您的解决方案。 【参考方案1】:要将设置传递回您的第一个 viewController,您可以使用从第一个 viewController 传递的闭包。
以下是如何执行此操作的示例。在prepare(for:)
中设置闭包processTipSettings
指向一个处理函数。在这种情况下,changeSegmentLabels
将采用提示设置并使其成为分段控件的标签。
当用户点击保存时,按钮的@IBAction 将使用 textFieldLabels 中的值调用 processTipSettings
,changeSegmentLabels
将更新分段控件中的标题。
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)
【讨论】:
什么是 segue.indentifier?我假设它的标题在屏幕顶部对吗? 如果你只有一个 segue,你可以跳过它。如果您有来自同一个视图控制器的多个 segue,则 segue 标识符允许您确定您正在查看哪一个。通过单击 segue 箭头,然后在属性检查器中设置标识符字符串,您可以在 Storyboard 中设置标识符。 好的,非常感谢,您介意将我添加到可以快速聊天的地方吗?因为我有几个快速的问题..非常感谢 在此处提问,SO 会尽快将其转移到聊天中。 所以我这样做了,所以 processTips 只使用单个文本字符串而不是数组字符串。所以我只是在两个初始化中都去掉了“[]”,所以它基本上看起来像 var processTipSettings: ((String?) -> ())?而changeLabels的参数是(文本:字符串)?但是它似乎不起作用...单击“保存设置”后屏幕返回原始屏幕,但按钮标题没有改变以上是关于如何从另一个 UIViewController 更改分段控件标题(设置)的主要内容,如果未能解决你的问题,请参考以下文章
如何从另一个 UIViewController 重新加载 UITableViewController
如何从另一个 UIViewController 更改分段控件标题(设置)
如何从另一个/第二个 UIViewController 隐藏 UILabel?
从另一个 UIViewController 中呈现一个 UIViewController?