2017-03-31 22 views
0

こんにちは私はSwiftの初心者です。配列のボタンのタイトルにどのように文字列値を格納できるかを知りたいと思います。Swiftの配列からボタンに値を割り当てる方法

私の場合に限って:私はストーリーボードに24個のボタンがあり、すべてコントローラビューで1つのアクションに入れられます。私のモデルでは、24個の絵文字の配列を持っており、これらの絵文字を自分のボタンに(無作為に)割り当てる方法を知りたいと思います。

var emoji : [String] = ["","", "","", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "","", "", "", "", ""] 

ありがとうございます。

+0

あなた可能性[ 'emoji'配列をシャッフルしてください(http://stackoverflow.com/questions/24026510/how-do-i-shuffle-an-array-in-swift)。その後、' i'のラベルを順番に設定します:thボタンを 'e'の' i'番目のエントリに追加します。あなたの24個のボタンの上にある 'i'のためのmoji配列。 – dfri

+0

面白いことに、GameKitには、配列シャッフル関数 'let shuffledEmoji = GKRandomSource.sharedRandom()。arrayByShufflingObjects(in:emoji) 'が組み込まれています。 –

答えて

0

ビューにボタンを追加したとします。インターフェイスビルダーを介してこのようなことをすることができます。絵文字配列を他の場所でソートする方法の例はたくさんあります。

コードにボタンを接続する場合、 出口接続としてそれらを接続
class ViewController: UIViewController { 

    let emoji = ["","", "","", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "","", "", "", "", ""] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let buttons: [UIButton] = view.subviews.flatMap { $0 as? UIButton } 
     guard buttons.count <= emoji.count else { 
      fatalError("Not enough emoji for buttons") 
     } 
     // sort emoji here 
     _ = buttons.enumerated().map { (index, element) in 
      element.setTitle(emoji[index], for: .normal) 
     } 
    } 
} 
1

。次に、一連のボタンが表示されます。それに応じてボタンのテキストを設定するには:

for button in buttons { 
    button.setTitle(emoji[buttons.index(of: button)!], for: []) 
} 

これは、すべてのボタンをループし、対応する絵文字にタイトルを設定します。あなたは、絵文字をランダム化するために、配列をシャッフルする方法を見てすることができますHow do I shuffle an array in Swift?

0

このソリューションはshuffled()zip()

class MyViewController: UIViewController { 

    // Add the face buttons to the collection in the storyboard 
    @IBOutlet var faceButtons: [UIButton]! 
    let faces = ["","", "","", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "","", "", "", "", ""] 

    func randomizeFaces() { 
     // zip() combines faceButtons and faces, shuffled() randomizes faces 
     zip(faceButtons, faces.shuffled()).forEach { faceButtton, face in 
      faceButtton.setTitle(face, for: .normal) 
     } 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     randomizeFaces() 
    } 

} 

を活用ここshuffled()の定義ですから:How do I shuffle an array in Swift?

extension MutableCollection where Indices.Iterator.Element == Index { 
    /// Shuffles the contents of this collection. 
    mutating func shuffle() { 
     let c = count 
     guard c > 1 else { return } 

     for (firstUnshuffled , unshuffledCount) in zip(indices, stride(from: c, to: 1, by: -1)) { 
      let d: IndexDistance = numericCast(arc4random_uniform(numericCast(unshuffledCount))) 
      guard d != 0 else { continue } 
      let i = index(firstUnshuffled, offsetBy: d) 
      swap(&self[firstUnshuffled], &self[i]) 
     } 
    } 
} 

extension Sequence { 
    /// Returns an array with the contents of this sequence, shuffled. 
    func shuffled() -> [Iterator.Element] { 
     var result = Array(self) 
     result.shuffle() 
     return result 
    } 
} 
関連する問題