2015-10-06 296 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

相關問題