2016-08-18 26 views
1

我想使用啓動segue的按鈕的標題作爲出現的視圖中的另一個按鈕的標題。在第一個視圖中,我創建了4個包含在名爲Table的數組中的按鈕。 然後在第二個視圖中,我只有一個按鈕,其標題將是觸發segue的按鈕的名稱。這裏是我做了什麼的快速概覽如何在swift中傳遞一個按鈕標籤

@IBOutlet var Table: [UIButton]! 
@IBAction func commanderSegue(sender: AnyObject?) { 

    performSegueWithIdentifier("commander", sender: nil) 

    print("it works!") } 
    override func prepareForSegue(segue:UIStoryboardSegue, sender:AnyObject?){  
if segue.identifier == "commander" { 

    print("we can order!") 
     if let nextVC: OrderViewController = segue.destinationViewController as? OrderViewController { 

      if let buttonTitle = sender as? UIButton.currentTitle { 

      nextVC.tablex.titleLabel.text = buttonTitle 

     print("Miam!") 
      } 
     } 
} 

但它告訴我'當前標題不是UIButton的成員類型。我該如何解決?感謝任何能提供幫助的人。

回答

1

按鈕的標籤是titleLabel

let button = sender as! UIButton 
if let buttonTitle = button.titleLabel!.text { 
    nextVC.buttonText = buttonTitle // Assign the label text to a variable in the next viewController 
} 

在你的第二個VC,你會想:

var buttonText: String! 

然後你就可以分配到下一個VC的按鈕標題:

tablex.titleLabel.text = buttonText 
+0

謝謝,我嘗試過,但它沒有工作。我收到此消息''致命錯誤:意外地發現零,同時解包可選值'' (lldb)在let button = sender處! UIbutton聲明。這是否因爲我們使用而發生!代替 ?在發件人爲?那麼明天我會繼續嘗試不同的解決方案。 –

2

三件事:

  1. 您應該通過UIButton沿sendercommanderSegue。您知道您的@IBAction已連接到某個按鈕,因此請將其類型更改爲UIButton,並將nil替換爲performSegueWithIdentifier調用中的sender

    performSegueWithIdentifier("commander", sender: sender) 
    
  2. prepareForSegue,有條件地投了senderUIButton,然後調用該currentTitle

    if let buttonTitle = (sender as? UIButton)?.currentTitle { 
    
  3. @IBOutlet S IN的destinationViewController不會在prepareForSegue時間設置。爲了解決這個問題,該按鈕的標題保存在destinationViewController的屬性稱爲buttonTitle,然後在destinationViewController分配給UILabelviewDidLoad

    var buttonTitle = "" 
    
    override func viewDidLoad() { 
        super.viewDidLoad() 
        tablex.titleLabel.text = buttonTitle 
    } 
    

@IBOutlet var Table: [UIButton]! 
@IBAction func commanderSegue(sender: UIButton) { 

    performSegueWithIdentifier("commander", sender: sender) 

    print("it works!") 
} 

override func prepareForSegue(segue:UIStoryboardSegue, sender:AnyObject?) {  
    if segue.identifier == "commander" { 

     print("we can order!") 
     if let nextVC = segue.destinationViewController as? OrderViewController { 

      if let buttonTitle = (sender as? UIButton)?.currentTitle { 

       nextVC.buttonTitle = buttonTitle 

       print("Miam!") 
      } 
     } 
    } 
} 
+1

謝謝!我使用了你所說的和@ Shades的建議的組合。正如你所說的問題是我的發件人是零而不是指定UIButton。但我必須精確的說明tablex.titleLabel.text = buttonTitle不會更改文本。它工作時,我用tablex.setTitle(buttonTitle,forState:UIControlState.Normal)。當然,我必須使用語句var buttonTitle:String!來將buttonTitle定義爲一個字符串!在第二個VC。感謝你們 –

相關問題