如何在swift的第二个视图控制器中将信息传递给Uilabel?

时间:2016-06-11 01:46:04

标签: ios swift

我对swift很新,我只是想学习不同的技巧。

情况: 我有2个视图控制器。例如,视图控制器编号1由四个按钮(北,南,东,西)组成。让我们说你点击北按钮。您应该看到控制器编号2,视图控制器2中的UiLabel应显示按下的任何按钮的名称(在本例中为“北”)。 我知道当你向前传递信息时,你应该使用“准备segue”的方法但是有没有办法用所有4个按钮做到这一点?我在View Controller 2中也有一个可选的字符串变量,它应该捕获从View控制器1传递的信息。我已经到处搜索但我没有得到答案。

我目前在控制器1中看到的代码:

@IBAction func north(sender: UIButton) {

}
@IBAction func east(sender: UIButton) {

}
@IBAction func west(sender: UIButton) {

}
@IBAction func south(sender: UIButton) {

}

我目前在View Controller 2中的代码:

@IBoutlet weak var label2: UILabel!

var updateTheLabel: String?
override func viewDidLoad() {
super.viewDidLoad()
label2.text = updateTheLabel!
}

问题: 如何使用所有四个按钮执行segue以转到第二个视图控制器并分别更新UiLabel?

3 个答案:

答案 0 :(得分:2)

添加到@ ahmad-farrag的解决方案

您可以修改您的IB动作以从按下的按钮中选取文本

var buttonText = ""

@IBAction func north(sender: UIButton) {
   buttonText = sender.currentTitle.text
}
@IBAction func east(sender: UIButton) {
   buttonText = sender.currentTitle.text
}
@IBAction func west(sender: UIButton) {
   buttonText = sender.currentTitle.text
}
@IBAction func south(sender: UIButton) {
   buttonText = sender.currentTitle.text
}

这会将按钮中的文本分配给buttonText变量。现在在prepareForSegue中,让我们假设两个视图控制器通过带有标识符secondControllerSegue的segue连接。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
   if segue.identifier == "secondControllerSegue" {
      let controller = segue.destinationViewController as! SecondViewController
      controller.updateTheLabel = buttonText
   }
}

这会将我们之前捕获的buttonText发送到secondViewController

答案 1 :(得分:1)

是的,你可以。

只需从故事板中删除segue,然后以编程方式执行此操作并将updateTheLabel属性设为公开。

例如:

let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewControllerIdentifier") as? SecondViewController
secondViewController.updateTheLabel = "Whatever you like"

//Then push or present to the secondViewController depending on your hierarchy.
//self.navigationController?.pushViewController(secondViewController!, animated: true)
//or
//self.presentViewController(secondViewController!, animated: true, completion: nil)

答案 2 :(得分:0)

您可以使用NSNotificition Center 在ViewController中

var str = "INAGX4 Agatti Island";
var indexOfFirstSpace = str.IndexOf(" ");
var first = str.Substring(0, indexOfFirstSpace);
var second = str.Substring(indexOfFirstSpace+1);

目标视图控制器

   NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.testObserver(_:)), name: "testObserver", object: ios)