2009-06-25 6 views
5

L'utilisation de Settings.app sur l'iPhone n'est pas si difficile. En fait, Xcode fait le maximum pour vous. Il suffit d'ajouter le fichier Settings.bundle à votre projet et vous l'avez pour presque rien.Existe-t-il une bibliothèque ou une structure permettant de définir les préférences à partir d'une application iPhone?

En ce moment je développe une application pour l'iPhone qui exige que l'utilisateur remplisse plusieurs "formes", la plupart du temps paires de valeur-clé, quelques curseurs et plusieurs vues modales avec des menus déroulants. Donc, la tâche est similaire à celle de Settings.app. Faire les formulaires moi-même est une lourde tâche à mon avis, alors je me demande s'il existe un cadre pour ce genre de tâches. Malheureusement, il semble qu'Apple ne fournisse pas sa propre solution. Peut-être que quelqu'un connaît un cadre ou un article sur le Web qui décrit les meilleures pratiques.

Dans le cas où vous ne comprenez pas à quel modèle que je fais référence, j'ai fait une capture d'écran: http://img.skitch.com/20090625-s8bf6ahybwe3cesd1id38h3nt.jpg

Répondre

1

Eh bien, si vous faites des paramètres alors je suggère de les mettre au bon endroit et en utilisant les paramètres. paquet.

Je suppose que vous faites des réglages qui sont très importants pour votre application et ce serait une expérience utilisateur horrible s'ils devaient continuer à sauter de l'application vers les paramètres et vice-versa. Quand vous dites que la tâche est lourde - pouvez-vous élaborer - comme je l'ai fait et il n'a pas été lourd.

Utilisez un UITableViewController

pour chaque cellule que vous souhaitez utiliser mis en code similaire à:

 cell.textLabel.text = @"Last name:"; 
     UIFont *labelFont = [UIFont systemFontOfSize:[UIFont labelFontSize]]; 
     CGSize textSize = [cell.textLabel.text sizeWithFont:labelFont]; 
     baseRect.origin.x = textSize.width+15; 
     baseRect.origin.y +=7; 
     baseRect.size.width = baseRect.size.width - textSize.width - 15; 
     baseRect.size.height = 23; 
     UITextField *textField = [[UITextField alloc] initWithFrame:baseRect]; 
     textField.keyboardType = UIKeyboardTypeAlphabet; 
     textField.returnKeyType = UIReturnKeyDone; 
     textField.clearButtonMode = UITextFieldViewModeWhileEditing; 
     textField.delegate = self; 
     textField.placeholder = @"last name"; 
     [textField addTarget:self action:@selector(lastNameChanged:) forControlEvents:UIControlEventAllEditingEvents]; 
     textField.tag = 182; 
     [cell.contentView addSubview:textField];  
     [textField release]; 

Cela m'a travaillé pour reproduire l'interface dont vous parlez - l'exemple ici est un TextField - mais le même code a très bien fonctionné avec tous les contrôles.

+0

Vous ne réutilisez pas vos UITableViewCells? Si vous faites comment pouvez-vous distinguer lequel de vos champs de texte invoquer lastNameChanged:? –

+0

Oui bien sûr que je suis! - La balise sur le textField me dit quel champ est lequel. Aussi, je m'assure que tous les contrôles qui correspondent à ma liste de balises sont supprimés lorsque la cellule est recyclée. – Grouchal

0

Je suis sûr que ce qu'il demande est un cadre qui recrée l'interface des paramètres du fichier settings.bundle afin qu'il puisse y avoir des paramètres à la fois dans l'application des paramètres et dans votre application.

Je ne connais pas encore quelque chose comme ça mais, je pourrais vraiment en utiliser un et j'ai envisagé d'en écrire un.

2

Il est préférable de définir des paramètres dans l'application, au moins jusqu'à ce qu'Apple facilite l'envoi de l'utilisateur vers les paramètres, puis de nouveau dans l'application. Si vous regardez le nouveau 3.0 UITableViewCellStyles, il y a un style fait sur mesure pour faire les paramètres de type de cellules - il serait assez facile de construire un écran de paramètres simples.

3

Après de nombreuses recherches, je n'ai pas réussi à obtenir une bonne réponse à ma question initiale. Mais maintenant j'ai trébuché sur ce dépôt sur github:

+0

Sur la page mySettings Github: "mySettings n'est plus en développement actif". Le dernier commit date de janvier 2010. –

Questions connexes