如何使用swift访问另一个视图控制器中的一个视图控制器的IBoutlet?

时间:2015-10-06 05:43:24

标签: ios swift

如何将标签文字更改为文本字段文字? 此源代码将标签文本更改为同一类中的文本域文本,但我想更改不同类中的标签。 label位于ViewController.swift中,textfield位于ProfileViewController.swift

这是源代码:

ViewController.swift

import UIKit
import Social

class ViewController: UIViewController, SideBarDelegate {
    @IBOutlet weak var name: UILabel!

    @IBOutlet weak var hedgeImage: UIImageView!
    @IBOutlet weak var hideView: UIView!
    var sideBar:SideBar = SideBar()

    override func viewDidLoad() {
    }

ProfileViewController.swift

class ProfileViewController: UIViewController {
    @IBOutlet weak var ouput: UILabel!
    @IBOutlet weak var name: UITextField!
    @IBAction func nameChange(sender: AnyObject) {
        ouput.text = name.text
    }
}

2 个答案:

答案 0 :(得分:1)

执行此操作的众多方法之一:您可以向textField添加一个观察者并更新一个包含名称文本的变量,然后您可以将其发送到新的vc以准备segue。这是一个样本

class ViewController: UIViewController {
    var nameRecieved:String?
    @IBOutlet weak var name: UILabel!{
        didSet{
            if nameRecieved != nil { name.text = nameRecieved }
        }
    }
}

class ProfileViewController: UIViewController, UITextFieldDelegate {
    var nameHolder:String?
    @IBOutlet weak var name: UITextField! { didSet{ name.delegate = self } }
    //notification    
    var nameTextFieldObserver: NSObjectProtocol?
    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        let center = NSNotificationCenter.defaultCenter()
        let q = NSOperationQueue.mainQueue()
        nameTextFieldObserver = center.addObserverForName(UITextFieldTextDidChangeNotification, object: name, queue: q){
            notification in
            self.nameHolder = self.name.text
        }
    }
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        if nameTextFieldObserver != nil { NSNotificationCenter.defaultCenter().removeObserver(nameTextFieldObserver!) }
    }

    //Here you can pass the value of nameHolder to the other vc's var nameRecieved in your prepare for segue 
}

答案 1 :(得分:0)

你需要抓住你的ViewController对象并传递值。像这样:

@IBAction func nameChange() {
    ouput.text = name.text

    // given both your views have a same parent
    // and this view is the first child
    let myViewController = parentViewController!.childViewControllers[1]

    myViewController.name.text = name.text
    myViewController.printLabelText()
}
相关问题