2015-10-06 127 views
0

如何将标签文本更改为文本字段文本? 此源代码将标签文本更改为同一类中的文本字段文本,但我想更改不同类中的标签。 标签是在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 
    } 
} 

回答

1

之一很多方法可以做到这一点:你可以一个观察者添加到文本框,并更新保存名称文本,然后你就可以向新的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 
} 
+0

感谢您的帮助我使用prepareforsegue函数解决了问题:) – Songshil

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() 
} 
+1

是不是不好的做法是从另一个视图控制器更改视图?我认为这是违反MVC原则的。 '代表'是为了这个确切的目的。 – Behdad

+0

您可能在屏幕上并排显示两个视图控制器。在VC中,我们不是从一个VC切换到另一个VC,而是改变文本字段中的文本。假设两个VC都在屏幕上可见,更改一次VC的文本字段中的文本正在改变另一个VC上的标签。如果第二个VC不在屏幕上,那么一旦第二个VC出现在屏幕上,共享数据就会显示出来。 – Abhinav

+0

感谢您帮助我解决问题:D – Songshil

相关问题