如何使用swift在另一个视图控制器中访问一个视图控制器的IBoutlet?
问题描述:
如何将标签文本更改为文本字段文本? 此源代码将标签文本更改为同一类中的文本字段文本,但我想更改不同类中的标签。 标签是在ViewController.swift和TextField处于ProfileViewController.swift如何使用swift在另一个视图控制器中访问一个视图控制器的IBoutlet?
这是源代码:
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
}
}
答
之一很多方法可以做到这一点:你可以一个观察者添加到文本框,并更新保存名称文本,然后你就可以向新的VC在赛格瑞准备一个变量。这里是一个示例
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
}
答
你需要抓住你的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()
}
感谢您的帮助我使用prepareforsegue函数解决了问题:) – Songshil