我正在用 Swift 开发一个应用程序,简而言之,它可以告诉人们各种货币的比特币价格。要选择货币,用户从带有 UITableView 的 View Controller 中的列表中进行选择。这是 currencyViewController,它显示在我的主屏幕 viewController 中。
我想要发生的是,当用户关闭 currencyViewController 时,它将一个字符串传递给主 viewController 中的 UIButton。
这是应该传递数据的 prepareForSegue 函数:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "presentCurrency") {
currencySelector.setTitle("\currencySelected", forState: UIControlState.Normal)
}
}
CurrencySelector 是主视图 Controller 中的一个 UIButton,currencySelected 是第二个 View Controller currencyViewController 中的一个变量。
它给出错误“文字中的无效转义序列”
因此,我将其缩小为两个问题之一:
无法从 currencyViewController“看到”来自 viewController 的变量。如果是这样,我如何从 CurrencyViewController 修改 CurrencySelector 的文本?
出于某种原因,当用户退出推送的 CurrencyViewControler 时,不会调用 prepareForSegue。
这是怎么回事?谢谢,抱歉 - 我只是一个敏捷的新手。
最佳答案
2 - 当您通过 segue 推送一个新的 View Controller 时调用“prepareForSegue”,但在您关闭它时不会调用。解雇时不会调用 segue。
1 - 一个很好的方法是委托(delegate)模式。
所以主视图 Controller 将是 currencyViewController 的委托(delegate),并且会在该 Controller 被关闭时收到一条消息。
在您准备委托(delegate)的 currencyViewController 文件的开头:
protocol CurrencyViewControllerDelegate {
func currencyViewControllerDidSelect(value: String)
}
然后向 currencyViewController 添加一个变量:
var delegate : CurrencyViewControllerDelegate?
现在,mainViewController 必须遵守该协议(protocol)并响应该功能:
class MainViewController : UIViewController, CurrencyViewControllerDelegate {
//...
func currencyViewControllerDidSelect(value: String) {
//do your stuff here
}
}
一切准备就绪。最后一步,在 prepareForSegue (MainViewController) 中,您将设置 currencyViewController 的委托(delegate):
var currencyVC = segue.destinationViewController as CurrencyViewController
currencyVC.delegate = self;
当用户选择 currencyViewController 中的值时,只需在委托(delegate)中调用该函数:
self.delegate?.currencyViewControllerDidSelect("stuff")
可能有点复杂,但它是一个非常有用的模式 :) 这里有一个很好的教程,如果您需要,可以提供更多信息:
http://www.raywenderlich.com/75289/swift-tutorial-part-3-tuples-protocols-delegates-table-views
关于ios - 从另一个 View Controller 快速修改一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26326739/