Question

Dans un effort apparemment sans fin pour en apprendre plus sur le développement de l'iPhone, j'ai joué avec une partie du code source disponible via pommes site du développeur. L'exemple particulier, je travaille avec est de base de données Livres, trouvé ici . Le DetailViewController et le AddViewController sont faits programatically, parce qu'il n'y a pas de fichiers pour les xib. Ma question porte sur les choses à ajouter programatically une vue sans utiliser IB. Je veux mettre un UISwitch sous le UITableView qui a des informations détaillées sur un livre en particulier dans le DetailView. Comment puis-je faire cela? Voilà ce que je l'ai essayé jusqu'à présent:

Dans le AddViewController, je configurer le UISwitch:

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

 }

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

Je configuration aussi un IBAction:

- (IBAction)flip:(id)sender;

Alors je synthétisent dans le fichier AddViewController.m, mais rien ne se passe. J'ai juste besoin d'installer l'interrupteur et faire en sorte que je peux contrôler ce qu'il fait de mon IBAction que je configuration. Je sais que c'est honteusement simple, mais je ne peux pas le comprendre. Ainsi, toute aide serait appréciée! Merci

Modifier 1

Je mis en œuvre le code que je dirigeais dans la 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 avertissements disant que la déclaration locale de « onoff » cache la variable d'instance. Mais même si il y a ces gains, la UISwitch apparaît très bien, mais quand je me déplace, ou l'utiliser, il ne ressemble pas à cela fonctionne pleinement. Pour mon action qui ressemble à ceci:

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

Lorsque le commutateur est activé, la console doit lire, et quand son arrêt, la console doit se lire au large. Droite? Chaque fois que je bouge, il répète que dans la console, au large. Si son sur, ou si son arrêt, il ne montre que hors tension. Que dans le monde que je fais mal? S'il vous plaît aider! Merci

Était-ce utile?

La solution

Le compilateur essaie de vous aider. Vous surchargeons la variable d'instance onoff dans votre viewDidLoad; donc, qui n'a jamais se régler. Dans votre -flip: méthode, vous faites référence à un contrôleur nul. Il y a deux façons de corriger cela:

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

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

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

Autres conseils

Steve, je suis désolé si je mal compris votre question. Avez-vous créé en fait le UISwitch et l'ajouter à la hiérarchie de la vue? -loadView de votre contrôleur ou la mise en œuvre -viewDidLoad devrait avoir le code comme suit:

// 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];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top