currencyViewController

currencyViewController

我正在Swift中开发一个应用程序,其要点是告诉人们各种货币的比特币价格。要选择货币,用户可以从具有UITableView的视图控制器中的列表中进行选择。这是currencyViewController,在我的主屏幕viewController中显示。

我想发生的是,当用户关闭currencyViewController时,它将字符串传递给主viewController中的UIButton。

这是应该传递数据的prepareForSegue函数:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "presentCurrency") {

        currencySelector.setTitle("\currencySelected", forState: UIControlState.Normal)

    }
}

CurrencySelector是主viewController中的UIButton,currencySelected是第二个视图控制器currencyViewController中的变量。

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

因此,我将其缩小为两个问题之一:
  • 无法从currencyViewController中“查看” viewController中的变量。如果是这样,如何从CurrencyViewController修改CurrencySelector的文本?
  • 由于某种原因,当用户退出推送的CurrencyViewControler时,不会调用prepareForSegue。

  • 这里发生了什么?谢谢,并道歉-我不过是个新手。

    最佳答案

    2-当您通过segue推送新的视图控制器时,将调用“prepareForSegue”,而在您将其关闭时则不会调用。解雇后不要求提起诉讼。

    1-执行此操作的好方法是委托模式。

    因此,主视图控制器将是currencyViewController的委托,并且在关闭该控制器时会收到一条消息。

    在currencyViewController文件的开头,您准备委托:

    protocol CurrencyViewControllerDelegate {
      func currencyViewControllerDidSelect(value: String)
    }
    

    然后将一个变量添加到currencyViewController中:
    var delegate : CurrencyViewControllerDelegate?
    

    现在,mainViewController必须符合该协议并对该函数负责:
    class MainViewController : UIViewController, CurrencyViewControllerDelegate {
      //...
    
      func currencyViewControllerDidSelect(value: String)  {
        //do your stuff here
      }
    }
    

    一切准备就绪。最后一步,在prepareForSegue(MainViewController)中,您将设置currencyViewController的委托:
    var currencyVC = segue.destinationViewController as CurrencyViewController
    currencyVC.delegate = self;
    

    当用户在currencyViewController中选择值时,只需在委托中调用该函数即可:
    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/

    10-09 07:01