2017-07-23 37 views
-1

我有plist文件和數據庫,在plist文件有英文字母和數據庫行都有字符串,例如(倫敦),我將字符串轉換爲字符數組的setTitle和追加到plist文件。我通過(for循環)創建了14個UIButton,並且我從數據庫的行中獲得了setTitle,並給予了洗牌並添加了來自plist的信件並給予了洗牌。斯威夫特3 - UIButton的加入從plist中和數據庫

所以我的問題是,從數據庫中添加我的人物時,告訴我剛剛從數據庫中的字符和洗牌是這樣的:

enter image description here

但我不需要,只是我需要先加入以設置標題從數據庫中的所有字符和洗牌,剩下的空按鈕添加像這樣的plist文件:

enter image description here

我怎樣才能做到像上面的圖片(圖片2次)?!

這是我的代碼,這有什麼錯編寫代碼? :

let fileName : String = " EnglishLetters" 
let fileExt : String = "plist" 
let pathRes = Bundle.main.path(forResource: fileName, ofType: fileExt) 
let pathDict = NSDictionary(contentsOfFile: pathRes!) 
var letters : [String] = pathDict?.object(forKey: "Letters") as! [String] 

for data in listdata { // SQLite database 

    let dataAnswer = data.ans // ans is a row in the SQLite database 
    let dataArrayAnswer = dataAnswer.characters.map{String($0)} 
    letters.append(contentsOf: dataArrayAnswer) 

    for char in dataArrayAnswer {} 

     for i in 1...14 { 

      let tileButton = UIButton(type: .roundedRect) 
      let lettersAns = dataArrayAnswer.shuffled()[letters.distance(from: id, to: id)] // id is parameter 
      tileButton.setTitle(lettersAns, for: .normal) 
      tileButton.titleLabel?.font = UIFont(name: "HelveticaNeueW23forSKY-Bd", size: 15) 
      tileButton.setTitleColor(.black, for: .normal) 
      tileButton.setBackgroundImage(UIImage(named: "Cell"), for: .normal)    
      tileButton.addTarget(self, action: #selector(moveTile(sender:)), for: .touchUpInside) 
      xAxis = xAxis + buttonWidth + space 

      view.addSubview(tileButton) 


      if i%7 == 0 { 

       xAxis = emptySpace/2 
       yAxis = yAxis2 + space 

      } 

     } 
    } 
} 
+0

我認爲你的邏輯是有缺陷的。你必須做的,有一個字母數組顯示:'lettersForAnswer:[String]',爲它添加所有答案的字母。然後,'爲我in lettersForAnswer.count .. 14 {//從所有可用的字母中添加一個隨機字母}',隨機播放它,然後執行for循環來構造按鈕。 – Larme

+0

對不起,你能更清楚地寫出答案嗎?因爲代碼在評論中不清楚! @Larme –

+0

我現在在做什麼?! :(@Larme –

回答

1

你需要做的就是首先用您的所有目標信件陣列(混排和添加隨機字母),然後在該陣列上運行更新按鈕的標題是什麼。

開始通過填充一個14值序列與隨機字母:

var presentedLetters : [String] = [String]() 
var availableLetters : [String] = pathDict?.object(forKey: "Letters") as! [String] 

var availableLetterIndexes : [Int] = Array(0..<availableLetters.count) 

for letterAt in 0 ..< 14 
{ 
    let randomIndex : Int = Int(arc4random_uniform(UInt32(availableLetterIndexes.count))) 
    var charIndex : Int = availableLetterIndexes[randomIndex] 

    presentedLetters.append(availableLetters[charIndex]) 

    availableLetterIndexes.remove(at: randomIndex) 
} 

生成的答案串可用位置:

var availableIndexes : [Int] = Array(0..<presentedLetters.count) 

然後在你的信去從數據庫,並隨機添加它們放置在目標陣列中(同時記住添加的索引以防止覆蓋字母):

var addedAnswerIndexes : [Int] = [Int]() 

let answerString = data.ans // ans is a row in the SQLite database 
let answerCharacters = answerString.characters.map{String($0)} 

for answerCharAt in answerCharacters 
{ 
    let randomIndex : Int = Int(arc4random_uniform(UInt32(availableIndexes.count))) 
    var charIndex : Int = availableIndexes[randomIndex] 

    presentedLetters[charIndex] = answerCharAt 

    availableIndexes.remove(at: randomIndex) 
} 

然後呈現的信件將有一個所有相關值的數組。

編輯:

爲標題添加按鈕,只是去了presentedLetters陣列:

 for i in 1...14 { 

      let tileButton = UIButton(type: .roundedRect) 
      tileButton.setTitle(presentedLetters[i-1], for: .normal) 

      ...... 

     } 
    } 

祝你好運!

+0

我等了你4天,([聊天](HTTPS://chat.stackoverflow。 com/rooms/151478/ameen-mk-and-unkgd))@unkgd –