2015-10-04 31 views
0

我一直在尋找我的答案,但一切似乎有點混亂,所以我決定試着問以下問題:我在第一個視圖中有三個按鈕。如何根據我們點擊哪個按鈕設置標題。發送數據

紅色,藍色和白色。

而在這第一個視圖隱藏的標籤太,其變化取決於按鈕的點擊(和它出現時一個按鈕被點擊以文本「紅/藍/白鍵選擇」)。

而且,當一個按鈕按下時,一個新的按鈕並用文本「下一個屏幕」出現一個SEGUE推到另一種觀點認爲,在標題標籤。

的問題是:如何設置標題在新視圖取決於哪個按鈕,我們在第一個VC挖?

我的意思是,如果我們點擊紅色的絲毫不差將是:「我們已經按下紅色按鈕」。等

Screen mainVC

代碼:

@IBOutlet weak var labelTipo: UILabel! 
@IBOutlet weak var siguiente: UIButton! 

var redSel = String() 
var BlueSel = String() 
var whiteSel = String() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    siguiente.hidden = true 

    redSel = labelTipo.text! 
    BlueSel = labelTipo.text! 
    whiteSel = labelTipo.text! 
} 

@IBAction func redButton(sender: AnyObject) { 
    siguiente.hidden = false 

    labelTipo.text = "Has elegido un regalo de cumpleaños" 
} 

@IBAction func blueButton(sender: AnyObject) { 
    siguiente.hidden = false 

    labelTipo.text = "Has elegido un regalo de aniversario" 
} 

@IBAction func whiteButton(sender: AnyObject) { 
    siguiente.hidden = false 

    labelTipo.text = "Has elegido un regalo casual" 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if(segue.identifier == "detailViewController") { 
     print("Colour is") 

     let vc = segue.destinationViewController as! detailViewController 

     vc.blueSel = BlueSel 
     vc.redSel = redSel 
     vc.whiteSel = whiteSel 
    } 
} 
} 

class ViewController: UIViewController { 

var redSel = String() 
var blueSel = String() 
var whiteSel = String() 

@IBOutlet weak var titleLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    titleLabel.text = "" 
} 
+0

根據點擊的按鈕存儲值。在segue中,查詢此參數並將其傳遞給呈現的視圖控制器。 – Abizern

回答

2

這是非常簡單的,請創建一個局部變量分配的字符串時,你在點擊該按鈕。並將這個變量傳遞給另一個viewController,在那裏你推送它。在你的情況下,將「labelTipo.text」的值賦給一個新的變量並將其傳遞給另一個viewController。

// Your SourceViewController 

@IBOutlet weak var labelTipo: UILabel! 
@IBOutlet weak var siguiente: UIButton! 

    var passThisValue = String() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    siguiente.hidden = true 

} 

@IBAction func redButton(sender: AnyObject) { 
    siguiente.hidden = false 

    labelTipo.text = "Has elegido un regalo de cumpleaños" 
    self.passThisValue = labelTipo.text 

} 

@IBAction func blueButton(sender: AnyObject) { 
    siguiente.hidden = false 

    labelTipo.text = "Has elegido un regalo de aniversario" 
    self.passThisValue = labelTipo.text 

} 

@IBAction func whiteButton(sender: AnyObject) { 
    siguiente.hidden = false 

    labelTipo.text = "Has elegido un regalo casual" 

    self.passThisValue = labelTipo.text 
} 

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

     let vc = segue.destinationViewController as! AnotherViewController 

     vc.valueFromSourceViewController = self.passThisValue 
    } 
} 
} 

// Your AnotherViewController 

class AnotherViewController: UIViewController { 

var valueFromSourceViewController = String() 

@IBOutlet weak var titleLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    titleLabel.text = self.valueFromSourceViewController 
} 
+1

絕對我愛互聯網兄弟。 = P Thx,它的工作完美! – FactorJose

+1

@FactorJose你總是可以問你堆棧溢出的問題,很多人都在這裏幫助你。 –

0

儘量讓你的prepareForSegue方法有些增加,但要labelTipo變量類的屬性:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if(segue.identifier == "detailViewController") { 
      print("Colour is") 

      let vc = segue.destinationViewController as! detailViewController 

      vc.blueSel = BlueSel 
      vc.redSel = redSel 
      vc.whiteSel = whiteSel 
//make some newLocalVariable property in vc! 
      vc.newLocalVariable = self.labelTipo.text 
     } 
    } 

所以,其實你在本地變量保存您的「VC」新價值「newLocalVariable」這等於labelTipo.text例如或任何你想要的。

+0

兄弟!你的回答太棒了! Thx爲您的時間! – FactorJose

+0

我很高興幫助)你可以使它+1) –

0

你可以有很多更簡潔一點點,雖然做到這一點。這裏是你可以從https://bitbucket.org/abizern/so-32935054/get/1ec75832723d.zip

如果您選擇的設定值時,您可以配置用戶界面的類型設置一個枚舉下載一個完整的例子。

這是完整的主視圖控制器

import UIKit 

class ViewController: UIViewController { 

    enum Selection: String { 
     case NoSelection = "" 
     case RedButton = "Has elegido un regalo de cumpleaños" 
     case BlueButton = "Has elegido un regalo de aniversario" 
     case WhiteButton = "Has elegido un regalo casual" 
    } 

    @IBOutlet var colorLabel: UILabel! 
    @IBOutlet var nextButton: UIButton! 

    var selection: Selection = .NoSelection { 
     didSet { 
      colorLabel.text = selection.rawValue 
      if selection == .NoSelection { 
       nextButton.hidden = true 
      } else { 
       nextButton.hidden = false 
      } 
     } 
    } 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     colorLabel.text = selection.rawValue 
     nextButton.hidden = true 
    } 

    @IBAction func onRed(sender: UIButton) { 
     selection = .RedButton 
    } 

    @IBAction func onBlue(sender: UIButton) { 
     selection = .BlueButton 
    } 

    @IBAction func onWhite(sender: UIButton) { 
     selection = .WhiteButton 
    } 


    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     guard 
      segue.identifier == "ShowDetail", 
      let destinationVC = segue.destinationViewController as? DetailViewController 
      else { return } 

     destinationVC.displayText = selection.rawValue 
    } 
} 

在您將字符串傳遞到目的地視圖控制器SEGUE:

import UIKit 

class DetailViewController: UIViewController { 

    @IBOutlet var label: UILabel! 

    var displayText: String = "" 


    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 
     label.text = displayText 
    } 

} 

這是更少的代碼,多一點優雅恕我直言。 UI通過設置選擇進行配置,您不必在每個功能中手動設置按鈕的hidden變量。

+0

thx爲你的時間@Abizern – FactorJose

相關問題