Frage

In einer scheinbar nicht enden wollenden Bemühungen um mehr über iphone Entwicklung zu erfahren, ich habe Äpfel Entwickler Website durch mit einigen der Quellcode um gespielt. Das spezielle Beispiel arbeite ich mit Core Data ist Bücher, hier rel="nofollow . Die DetailViewController und die AddViewController sind programmatisch gemacht, weil es keine xib Dateien für sie sind. Meine Frage ist über programmatisch Hinzufügen Dinge zu einer Ansicht ohne IB zu verwenden. Ich mag ein UISwitch unter der UITableView setzen, die die detaillierten Informationen über ein bestimmtes Buch in der Detailview hat. Wie mache ich das? Dies ist, was ich versucht habe, so weit:

In dem AddViewController, ich Setup die UISwitch:

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

 }

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

ich auch Setup ein IBAction:

- (IBAction)flip:(id)sender;

Dann synthetisieren ich es in der AddViewController.m Datei, aber nichts passiert. Ich brauche nur den Schalter zu installieren und machen es so, dass ich kontrollieren kann, was es tut von meinem IBAction, dass ich ein Setup. Ich weiß, das peinlich einfach ist, aber ich kann es nicht herausgefunden. So würde jede Hilfe dankbar! Dank

Bearbeiten 1

So implementiert ich den Code, wie ich in der viewDidLoad gerichtet war, etwa so:

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

Und es wirft zwei Warnungen sagen, dass die lokale Deklaration von ‚onoff‘ verbirgt die Instanz-Variable. Aber auch wenn es diese Gewinne sind, erscheint die UISwitch ganz gut, aber wenn ich es zu bewegen, oder verwenden Sie es, es nicht aussehen, wie es voll funktioniert. Für meine Aktion, die wie folgt aussieht:

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

Jedes Mal, wenn der Schalter eingeschaltet ist, sollte die Konsole lesen Sie weiter, und wenn seine aus, sollte die Konsole abzulesen. Richtig? Immer wenn ich es zu bewegen, es wiederholt sich nur in der Konsole aus. Wenn es auf, oder wenn sie aus, es zeigt nur ab. Was in der Welt mache ich falsch? Bitte um Hilfe! Dank

War es hilfreich?

Lösung

Der Compiler versucht, Ihnen zu helfen. Sie überschreiben das onoff Instanz-Variable in Ihrer viewDidLoad; so, das ist nie gesetzt zu werden. In Ihrem -flip: Methode, sind Referenzierung Sie eine Null-Controller. Es gibt zwei Möglichkeiten, dieses Problem zu beheben:

(a) Befreien Sie sich von der lokalen Erklärung onoff, und verwenden Sie nur Ihre Instanz Variable

(b) Guss des Absender Argument -flip: als UISwitch und Zugriff auf das:

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

Andere Tipps

Steve, tut mir leid, wenn ich Ihre Frage falsch verstanden. Haben Sie tatsächlich die UISwitch erstellen und in der Ansichtshierarchie hinzufügen? Ihr Controller -loadView oder -viewDidLoad Implementierung sollte Code wie haben folgende:

// 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];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top