Domanda

In uno sforzo apparentemente senza fine di saperne di più sullo sviluppo iPhone, ho giocato in giro con una parte del codice sorgente disponibile attraverso il sito web mele sviluppatore. L'esempio particolare sto lavorando con Core Data è libri, trovato qui . Il DetailViewController, e l'AddViewController sono fatti programatically, perché non ci sono tutti i file XI ter per loro. La mia domanda è di circa programatically aggiungere cose ad una vista senza utilizzare IB. Voglio mettere un UISwitch sotto l'UITableView che ha le informazioni dettagliate su un libro particolare nel detailview. Come faccio a fare questo? Questo è quello che ho provato finora:

Nel AddViewController, ho configurato l'UISwitch:

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

 }

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

Ho anche impostare un IBAction:

- (IBAction)flip:(id)sender;

Poi ho sintetizzare nel file AddViewController.m, ma non succede nulla. Ho solo bisogno di impostare l'interruttore e fare in modo che posso controllare quello che fa dal mio IBAction che ho setup. So che questo è imbarazzante semplice, ma non riesco a capirlo. Così, tutto l'aiuto sarebbe apprezzato! Grazie

Modifica 1

Così ho implementato il codice come mi è stato diretto per la viewDidLoad, in questo modo:

   - (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];

E lancia due avvertimenti dicendo che la dichiarazione locale di 'OnOff' nasconde la variabile di istanza. Ma anche se ci sono quei guadagni, l'UISwitch si apre bene, ma quando mi muovo, o lo uso, non sembra come sta funzionando completamente. Per la mia azione che assomiglia a questo:

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

Ogni volta che l'interruttore è acceso, la console dovrebbe leggere, e quando il suo fuori, la console dovrebbe leggere. Giusto? Ogni volta che mi muovo, è solo ripete nella console, al largo. Se la sua su, o se la sua via, mostra solo fuori. Ciò che nel mondo sono io che faccio male? Per favore aiuto! Grazie

È stato utile?

Soluzione

Il compilatore sta cercando di aiutarvi. Si sta ignorando la variabile di istanza OnOff nel vostro viewDidLoad; quindi, che non è mai PREPARATIVI. Nel vostro -flip: metodo, si sta riferimento a un controller nullo. Ci sono due modi per risolvere questo:

(a) Sbarazzarsi della dichiarazione locale del onoff, e basta usare la vostra variabile di istanza

(b) Fusioni l'argomento mittente -flip: come UISwitch, e accedere a quella:

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

Altri suggerimenti

Steve, mi dispiace se ho frainteso la tua domanda. Avete in realtà crea la UISwitch e aggiungerlo alla gerarchia vista? implementazione -loadView o -viewDidLoad del controller dovrebbe avere codice come il seguente:

// 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];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top