2017-09-03 7 views
0

ボタンのテキストに応じてボタンに警告を表示させようとしています。だから、ビューに私は配列から引っ張っていますいくつかのランダムな値持つ負荷んでした:あなたが見ることができるようにUIviewcontrollerのボタンアクションでviewDidLoadの変数を使用する

let ingredient1 = realBases[Int(arc4random_uniform(UInt32(realBases.count)))] 

var ingredient2 = juices[Int(arc4random_uniform(UInt32(juices.count)))] 
let indexOf2 = juices.index(of: ingredient2) 
juices.remove(at: indexOf2!) 
if ingredient2 == ingredient1 { 
    ingredient2 = "" 
} 

var ingredient3 = juices[Int(arc4random_uniform(UInt32(juices.count)))] 
let indexOf3 = juices.index(of: ingredient3) 
juices.remove(at: indexOf3!) 
if ingredient3 == ingredient1 { 
    ingredient3 = "" 
} 

var ingredient4 = juices[Int(arc4random_uniform(UInt32(juices.count)))] 
let indexOf4 = juices.index(of: ingredient4) 
juices.remove(at: indexOf4!) 
if ingredient4 == ingredient1 { 
    ingredient4 = "" 
} 

は、valueisセットした後、その要素は、それが再利用されることを防ぐために、アレイから削除されます。

は、その後、私はボタンにそれらの名前を与える:

btnO1.setTitle(newArray[0], for: UIControlState.normal) 
btnO2.setTitle(newArray[1], for: UIControlState.normal) 
btnO3.setTitle(newArray[2], for: UIControlState.normal) 
btnO4.setTitle(newArray[3], for: UIControlState.normal) 
btnO5.setTitle(newArray[4], for: UIControlState.normal) 

今私はボタンは、彼らが取得した名称に応じて、特定のメッセージを表示したいです。つまり、ボタンにOat Milkという名前が付いている場合、クリックすると、そのオーツの情報がアラートに表示されます。

だから私は次のコードを持っている:

let ingredient1Text = UIAlertController.init(title: "", message: "", preferredStyle: UIAlertControllerStyle.alert) 
ingredient1Text.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler:nil)) 

self.present(ingredient1Text, animated: true, completion: nil) 

switch ingredient1 { 
case "Oat Milk": 
    ingredient1Text.title = "Oat Milk" 
    ingredient1Text.message = oatMilkText 
case "Soy Milk": 
    ingredient1Text.title = "Soy Milk" 
    ingredient1Text.message = soyMilkText 
case "Almond Milk": 
    ingredient1Text.title = "Almond Milk" 
    ingredient1Text.message = almondMilkText 
case "Cashew Milk": 
    ingredient1Text.title = "Cashew Milk" 
    ingredient1Text.message = cashewMilkText 

私はカント何を、ボタンアクションでそのコードを入れています。これは、variable1がviewDidload()内にあるため、変数を認識しないためです。これらの変数をviewDidLoadの外に置くことはできますが、各ランダム値を定義した後で配列から要素を削除しているため、このことはできません。

私は罠に包まれています。

+1

今、あなたのボタンのアクションは、次のようになります。それでも、*なぜ*あなたは '原料 '値を削除していますか? (1)私には貧しいデザインのようです。 (2)それらを配列に格納し、そのインデックス値を 'UIButton'の' tag'値に関連付けます。それは*多少の改良されたデザインであり、実際にはそれ以上の "足跡"を取りません。 2008年(または私たちにとっては本当の昔の人、1978年)では、このようなものがいくつあるかを気にする必要がありません。ちょうどそれをやりなさい! – dfd

答えて

0

あなたはそうのようなアクションで、ボタンのタイトルにアクセスすることができます。

@IBAction func myAction(_ sender: Any?) { 
    guard let button = sender as? UIButton else { return } 
    let buttonTitle = button.title(for: .normal) 

    ... 
} 
0

は、このようなあなたのクラスに新しいメンバーとして辞書を追加します。今すぐ

var titleToActionDictionary: [String : String]

viewDidLoadアドオンでアイテムはtitleToActionDictionaryになります。

titleToActionDictionary[newArray[0]] = message // Message is the message you want to show in the alert of the button that has the title newArray[0] 

など。多分答えは助け

@IBAction func myAction(_ sender: UIButton?) { 
    let alertMessage = self. titleToActionDictionary[sender.title(for: .normal)] 
} 
関連する問題