2017-03-27 53 views
2

我在我的ThirdViewController上創建了一個名爲order1labelUILabel如何在一個ViewController上將我的UILabel上的文本從另一個ViewController中拉出來?

我想根據我的SecondViewController中決定的內容在該標籤上顯示文本。

下面是這兩個視圖控制器的代碼。當我點擊SecondViewController中的提交UIButton時,我預計orderTypeThirdViewController上更改爲Delivery,我預計這會反映在order1label中,但事實並非如此。它仍然說Takeout

我在做什麼不正確?我一直在尋找答案几個小時,似乎並不是這個極其簡單的問題的簡單解決方案。

import UIKit 

class SecondViewController: UIViewController{ 
    var orderType = "Takeout" 

    @IBAction func SubmitOrderClicked(sender: UIButton) { 
     orderType = "Delivery" 
    } 

} 

這裏是我的ThirdViewController代碼:

import UIKit 

class ThirdViewController: UIViewController { 

    var orderTextController = SecondViewController().orderType 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     order1Label.text = orderTextController 
    } 

    override func viewWillAppear(animated: Bool) { 
     order1Label.text = orderTextController 
    } 

    @IBOutlet var order1Label: UILabel! 

} 
+1

您正在'ThirdViewController'中創建* new *'SecondViewController'實例。你只需要將所需的信息從第二個傳遞到第三個。例如,你使用segues嗎? –

回答

1

聲明一個全局變量orderTypeSecondViewController,如:

import UIKit 

var orderType = "Takeout" 

class SecondViewController: UIViewController{ 
@IBAction func SubmitOrderClicked(sender: UIButton) { 
    orderType = "Delivery" 
} 

} 

這裏是代碼的ThirdViewController:

import UIKit 

class ThirdViewController: UIViewController { 


override func viewWillAppear() { 
    super.viewWillAppear() 
    order1Label.text = orderType 
} 

@IBOutlet var order1Label: UILabel! 

} 

希望這會滿足您的要求。快樂的編碼。

+0

當我運行該程序並首先進入SecondViewController並按下按鈕,然後訪問ThirdViewController時,這起作用。但是,如果我首先訪問ThirdViewController,然後單擊SecondViewController上的按鈕,我會再次在ThirdViewController中將order1Label.text從「Takeout」更改爲「Delivery」。這是爲什麼?非常感謝你的幫助。請指教。 – shampouya

+0

嘗試更新的代碼,並讓我知道:) –

+0

非常感謝你! – shampouya

1

我假設你想竊聽SecondViewController按鈕時呈現ThirdViewController,所以你需要將代碼更改爲:

import UIKit 

class SecondViewController: UIViewController{ 
    var orderType = "Takeout" 

@IBAction func SubmitOrderClicked(sender: UIButton) { 
    orderType = "Delivery" 
    let thirdController = ThirdViewController() 
    thirdController.order1Label.text = orderType 
    self.present(thirdController, animated: true, completion: nil) 
} 

} 

當您調用present時,您指定的視圖控制器將加載並進入viewDidLoad。你還就需要刪除此

var orderTextController = SecondViewController().orderType 
+0

我想你的意思是'self.present(thirdController,animated:true)'。除了第一個arg中的拼寫錯誤外,請記住,默認情況下'completion'也是'nil'。 –

+0

@PauloMattos你是對的,我更新了答案,謝謝。 – carlos21

+0

@ carlos21我剛剛運行了這些更改的代碼,並收到了一些運行時錯誤:「線程1:EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 0x0)」。有人知道那是什麼嗎? – shampouya

0

你的問題只是因爲secondController中的文本改變後需要通知thirdController中的標籤。 通過單擊按鈕更改文字後,您需要通知thirdController中的標籤以更改文字。 有幾種方法可以實現該功能,委託,通知,區塊等。 如果您有關於使用上述任何方式的進一步問題,請告訴我。

相關問題