28 votes

Création d'un UISwitch par programme

Dans une interminable effort pour en savoir plus sur le développement iphone, j'ai été jouer avec certains de la disposition du code source par le biais de pommes développeur de site web. L'exemple particulier, je travaille avec est de Base de Données de Livres, trouvé ici. Le DetailViewController, et la AddViewController sont faites par programmation, car il n'y a pas xib fichiers pour eux. Ma question est sur par programmation d'ajouter des choses à vue sans l'aide de l'IB. Je veux mettre un UISwitch sous la UITableView qui a les informations détaillées à propos d'un livre en particulier dans la fenêtre detravail. Comment dois-je faire? C'est ce que j'ai essayé jusqu'à présent:

Dans le AddViewController, j'ai installé le UISwitch:

@interface AddViewController : DetailViewController {
id <AddViewControllerDelegate> delegate;
UISwitch *onoff;

 }

@property (nonatomic, assign) id <AddViewControllerDelegate> delegate;
@property (nonatomic, retain) IBOutlet UISwitch *onoff;

J'ai aussi l'installation d'une IBAction:

- (IBAction)flip:(id)sender;

Puis-je en faire la synthèse, dans le AddViewController.m fichier, mais rien ne se passe. J'ai juste besoin d'installation de l'interrupteur et de faire en sorte que je peux contrôler ce qu'il fait à partir de mon IBAction que j'ai de l'installation. Je sais que c'est trop simple, mais je ne peux pas le comprendre. Ainsi, toute aide serait appréciée! Merci

Edit 1

J'ai donc mis en place le code que j'ai été dirigé vers dans le viewDidLoad, comme suit:

   - (void)viewDidLoad {

[super viewDidLoad];    
  UISwitch *onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents:UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];

Et il jette deux mises en garde en disant que le local de la déclaration de "onoff" se cache la variable d'instance. Mais même si il y a de ces gains, le UISwitch s'affiche très bien, mais quand je le déplacer ou l'utiliser, il ne regarde pas comme il fonctionne pleinement. Pour mon action qui ressemble à ceci:

- (IBAction)flip:(id)sender {
if (onoff.on) NSLog(@"On");  
else  NSLog(@"Off");  
 }

Chaque fois que le commutateur est activé, la console devrait le lire, et quand éteint, la console devrait lire. Droit? Chaque fois que je le déplacer, il suffit de le répète, dans la console, off. Si son sur, ou si son off, il ne s'affiche off. Ce qui dans le monde je fais mal? S'il vous plaît aider! Merci

28voto

Ben Gottlieb Points 59900

Le compilateur essaie de vous aider. Vous remplacez la variable d'instance onoff dans votre viewDidLoad; ainsi, cela n'est jamais réglé. Dans votre méthode -flip:, vous faites référence à un contrôleur nul. Il existe deux façons de résoudre ce problème:

(a) Débarrassez-vous de la déclaration locale de onoff, et utilisez simplement votre variable d'instance

(b) Convertissez l'argument expéditeur en -flip: en tant que UISwitch , et accédez à ce qui suit:

 - (IBAction) flip: (id) sender {
    UISwitch *onoff = (UISwitch *) sender;
    NSLog(@"%@", onoff.on ? @"On" : @"Off");
}
 

15voto

Costique Points 16058

Steve, je suis désolé si j'ai mal compris votre question. Avez-vous réellement créé le UISwitch et l'ajoutez à la hiérarchie des vues? L'implémentation -loadView ou -viewDidLoad votre contrôleur doit avoir un code comme celui-ci:

 // Use the ivar here
onoff = [[UISwitch alloc] initWithFrame: CGRectZero];
[onoff addTarget: self action: @selector(flip:) forControlEvents: UIControlEventValueChanged];
// Set the desired frame location of onoff here
[self.view addSubview: onoff];
[onoff release];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X