Swift: extraction de texte à partir d'un objet UITextField personnalisé dans un UITableViewCell et de les mettre dans un tableau
Je suis en train de faire une très simple d'application où l'utilisateur entre le nombre de personnes dans le premier Écran.
Dans le second écran, il génère un certain nombre de UITableViewCell
sur la base du nombre saisi par l'utilisateur dans le premier écran. Le UITableViewCell
ont un UITextField
, et je suis en train de stocker les données saisies dans les champs dans un tableau une fois que l'utilisateur clique pour aller à la troisième écran.
Comment puis-je le faire?
Merci d'avance!
Edit: je suis en utilisant la table de montage séquentiel.
Voici ce que le code qui appelle la coutume UITableViewCell
ressemble à mon UIViewController
:
func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
var cell: EditingCell = tableView.dequeueReusableCellWithIdentifier("Cell") as EditingCell
if indexPath.row % 2 == 0{
cell.backgroundColor = UIColor.purpleColor()
} else {
cell.backgroundColor = UIColor.orangeColor()
}
let person = arrayOfPeople[indexPath.row]
cell.setCell(person.name)
return cell
}
Voici ce que le code de la UITableViewCell
ressemble:
class EditingCell: UITableViewCell{
@IBOutlet weak var nameInput: UITextField!
override func awakeFromNib() {
super.awakeFromNib()
//Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
//Configure the view for the selected state
}
func setCell(name:String){
self.nameInput.placeholder = name
}
}
Merci de nous donner quelque chose à faire: Ajouter n'importe quel code correspondant à votre post. Travaillez-vous dans Swift ou Objective-C? Purement dans le code, ou à l'aide d'un storyboard? Où en êtes-vous? Ce qui ne fonctionne pas? Ne vous obtenez une erreur spécifique? Merci.
Est-ce plus clair maintenant? Rien n'est pas de travail. J'ai juste aucune idée de comment faire pour être en mesure d'obtenir les données de l'objet UITextfield de la classe EditingCell
Beaucoup, merci. Vous voulez que votre tableau pour contenir les
Oui, je veux que le texte de toutes les cellules pour être placé dans le tableau dans l'ordre. et la prochaine-vue-contrôleur est chargé en cliquant sur un bouton.
OK. C'est une sorte de fin de l'ici et maintenant - je vais jeter un oeil demain. Mais pour vous aider à démarrer: vous souhaitez boucle sur toutes les lignes, construire la indexPath pour chaque ligne (utilisation NSIndexPath(forRow: inSection:)) et ensuite utiliser tableView.cellForRowAtIndexPath pour obtenir la cellule. Ensuite, vous pouvez accéder à la cellule.nameInput.le texte et l'ajouter à votre tableau.
Est-ce plus clair maintenant? Rien n'est pas de travail. J'ai juste aucune idée de comment faire pour être en mesure d'obtenir les données de l'objet UITextfield de la classe EditingCell
Beaucoup, merci. Vous voulez que votre tableau pour contenir les
nameInput
texte de toutes les cellules, ou tout simplement celui qui est sélectionné? Je suppose que la prochaine vue-contrôleur est chargé, en "cliquant" une cellule ou il y a un bouton séparé?Oui, je veux que le texte de toutes les cellules pour être placé dans le tableau dans l'ordre. et la prochaine-vue-contrôleur est chargé en cliquant sur un bouton.
OK. C'est une sorte de fin de l'ici et maintenant - je vais jeter un oeil demain. Mais pour vous aider à démarrer: vous souhaitez boucle sur toutes les lignes, construire la indexPath pour chaque ligne (utilisation NSIndexPath(forRow: inSection:)) et ensuite utiliser tableView.cellForRowAtIndexPath pour obtenir la cellule. Ensuite, vous pouvez accéder à la cellule.nameInput.le texte et l'ajouter à votre tableau.
OriginalL'auteur Unis Barakat | 2014-12-31
Vous devez vous connecter pour publier un commentaire.
Il y a un problème avec votre approche si le nombre de lignes de votre table dépasse le nombre qui peut s'adapter à l'écran. Dans ce cas, les cellules de défiler à l'écran sera ré-utilisée, et le contenu de la
nameInput
textField sera perdu. Si vous pouvez être sûr que cela n'arrivera pas, utiliser le code suivant (dans la méthode qui gère le bouton tap) pour composer votre tableau:Sinon....
Cependant, si il est possible que les cellules vont défiler à l'écran, je suggère une autre solution. Définir la
delegate
pour lanameInput
les champs de texte, puis utilisez le délégué des méthodes pour saisir les noms tels qu'ils sont entrés.Tout d'abord, ajouter des variables à votre vue-contrôleur, pour tenir le tableau et le numéro de ligne du champ de texte en cours d'édition.
Puis, dans votre
cellForRowAtIndexPath
méthode, ajouter:Puis ajouter deux nouvelles fonctions, à attraper lorsque les champs de texte de début/fin de l'édition:
Lorsque l'utilisateur appuie sur le bouton, ils pourraient encore être en train de modifier l'un des noms. Pour répondre à cela, ajoutez le code suivant à la méthode qui gère le bouton robinets:
Cela force le textField pour terminer l'édition, et donc de déclencher la
didEndEditing
méthode, économisant ainsi le texte au tableau.L'esprit m'aider : stackoverflow.com/questions/36125286/... textfield fonctionnent vraiment!!Mais,j'ai besoin d'aide avec bouton nouveau.
Simple - bien documenté. merci
Quelqu'un peut-il fournir à l'Swift 3?
Cette réponse ne devrait même pas parler de la possibilité de récupérer les données à partir de toutes les cellules.
OriginalL'auteur pbasdf