Ios 将数据从设置视图控制器传递到主电路板-Swift
我是一个iOS应用程序开发新手,试图构建一个tip计算器。应用程序的基本功能已完成。我的MainstryBoard有一个段控件,它显示3%的值,如10、20、30。有一个设置按钮,单击该按钮可将我带到一个新页面,并在段控件中显示类似的%值Ios 将数据从设置视图控制器传递到主电路板-Swift,ios,swift,settings,Ios,Swift,Settings,我是一个iOS应用程序开发新手,试图构建一个tip计算器。应用程序的基本功能已完成。我的MainstryBoard有一个段控件,它显示3%的值,如10、20、30。有一个设置按钮,单击该按钮可将我带到一个新页面,并在段控件中显示类似的%值 我想做的是,当一个数字被点击(一段)时,它应该被保存为默认的tip%值。我应该如何将该值传递给Mainstoryboard函数,我在该函数中编写了一个计算小费金额的函数?我想您正在使用一个segue移动到另一个视图,因此请使用prepareForSegue方法
我想做的是,当一个数字被点击(一段)时,它应该被保存为默认的tip%值。我应该如何将该值传递给Mainstoryboard函数,我在该函数中编写了一个计算小费金额的函数?我想您正在使用一个segue移动到另一个视图,因此请使用prepareForSegue方法:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "tipSegue"
{
if let destinationVC = segue.destinationViewController as? OtherViewController {
destinationVC.tipPercent = someValue
}
}
}
您可以编写一个
协议
来设置默认百分比,并使您的MainViewController
符合该协议。当用户点击设置视图控制器中的一个按钮时,您可以调用一个函数(在协议中定义)让“委托”(MainViewController)知道发生了什么,并相应地设置默认变量。如果这是一个永久性设置,那么最好使用UserDefaults
,因为这正是它的设计目的。然后,在加载MainViewController
时,您可以访问UserDefaults
变量(如果存在)
一点协议帮助:
您的协议可以定义得非常简单—类似这样(必须在viewController之外声明—我通常在相关viewController的类声明之上声明):
这就是协议声明,除非您预期需要其他函数。请注意,实际上并没有定义该函数的功能-符合该协议的每个viewController可能具有不同的定义
然后,在您的settingsViewController中,您可能有一个协议一致性的可选变量,如下所示:
weak var settingsDelegate: SettingsDelegate?
在用户选择默认百分比后,您可以安全地检查代理是否存在,并将新数字传递给代理,如下所示:
if let delegate = self.settingsDelegate {
delegate.didUpdateDefaultTipPercent(to: 15.0) //this "15.0" will come from your segmented control action or whatever
}
在MainViewController
中,在prepareFor(segue…
中,您需要检查是否要进入设置,并将Main
设置为代理:
...
if let settings = segue.destination as? SettingsViewController {
settings.settingsDelegate = self
}
最后,您需要使您的MainViewController
符合协议。我通常这样做是为了使其更易于查找,并使其与其他内容分开:
extension MainViewController: SettingsDelegate {
func didUpdateDefaultTipPercent(to percent: Float) {
self.defaultPercentage = percent
}
}
谢谢!是的,我正在尝试使用UserDefaults。但是我不知道如何使用协议和委托。有什么帮助吗?@NinjaCowgirl好的,我在我的编辑中添加了完整的实现。请参见上文。最终,如果这是一个永久设置,UserDefaults是一个不错的选择。在这种情况下,你并不真的需要协议,但它是一个非常有价值的工具ing需要理解并能够实现。非常感谢!我会检查一下。谢谢!我使用了下面的一行,但没有传递值:override func prepare(对于segue:UIStoryboardSegue,发送方:Any?{if segue.identifier==“showSettings”{let settingsVC:SettingsViewController=segue.destination as!SettingsViewController setingsvc.delegate=self}
extension MainViewController: SettingsDelegate {
func didUpdateDefaultTipPercent(to percent: Float) {
self.defaultPercentage = percent
}
}