swift database sqlite uibutton plist

Swift 3-UIButton agregando setTitle desde plist y base de datos



database sqlite (1)

Lo que debe hacer primero es crear una matriz con todas sus letras objetivo (barajadas y agregadas al azar) y luego ejecutar esa matriz para actualizar los títulos de los botones.

Comienza rellenando un conjunto de 14 valores con letras al azar:

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) }

Genere posiciones disponibles para la cadena de respuestas:

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

A continuación, revise sus letras desde el archivo db y agréguelas en lugares aleatorios dentro de la matriz de destino (mientras recuerda los índices agregados para evitar que se sobrescriban las letras):

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) }

Y luego, letterspresentado tendrá una matriz de todos los valores relevantes.

EDITAR:

Para agregar los títulos a los botones, simplemente revise el conjunto de Cartas presentadas:

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

¡Buena suerte!

Tengo un archivo plist y una base de datos, en el archivo plist tiene letras en inglés y en la fila de la base de datos tiene String, por ejemplo (Londres) y convierto String en una matriz de caracteres y anexé al archivo plist. Creé 14 UIButtons por (para loop) y me dieron setTitle desde la fila de la base de datos y se les asignó aleatoriamente y agregué letras de plist y shuffle dado.

Entonces mi problema es que cuando agrego mis caracteres de la base de datos me muestro solo los caracteres de la base de datos y los baraje así:

Pero no necesito solo que primero tenga que agregar a setTitle todos los caracteres de la base de datos y se barajan y el botón vacío restante se agrega desde el archivo plist de esta manera:

¿Cómo puedo hacer como la imagen de arriba (2da foto)?

Este es mi código, ¿qué hay de malo en escribir el código? :

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 } } } }