ios - 从另一个 View Controller 快速修改一个变量

标签 ios swift pushviewcontroller

我正在用 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 中的一个变量。

它给出错误“文字中的无效转义序列”

因此,我将其缩小为两个问题之一:

  1. 无法从 currencyViewController“看到”来自 viewController 的变量。如果是这样,我如何从 CurrencyViewController 修改 CurrencySelector 的文本?

  2. 出于某种原因,当用户退出推送的 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/

相关文章:

ios - OTA安装:在设备上安装IPA进行测试

xcode - 在 Swift 中使用 GPUImage 录制/保存视频

objective-c - PushViewController 失败

ios - 使用(或不使用)导航 Controller 的栏推送到导航堆栈

ios - viewDidLoad 中 TextView 的函数(Swift)

javascript - 我的 setState 函数在 IOS 上不起作用

swift - 如何在 Swift 中使 UIBezierPath 平滑

swift - 如何点击更改模型的颜色,然后将其改回原来的颜色?

ios - UINavigationControllerDelegate 破坏了 PushViewController

android - 移动应用程序发布后是否可以从远程服务器更新?