2009-08-17 13 views
4

Ich versuche, einen UIImagePickerController anzuzeigen, sobald einer meiner View-Controller geladen wird. Ich würde ohne dass der Benutzer dies gerne mit einem Knopf drücken, damit ich die viewDidLoad Methode overrode wie folgt:UIImagePickerController wird nicht in viewDidLoad für iPhone SDK geladen

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init]; 
    imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    imagePickerController.allowsImageEditing = YES; 
    imagePickerController.delegate = self;  
    [self presentModalViewController:imagePickerController animated:YES]; 
    [imagePickerController release]; 
} 

Dies kompiliert und ausgeführt, aber wenn die View-Controller das Bild Picker geladen wird, wird nicht angezeigt. Dieser Code funktioniert gut, wenn ich ihn beispielsweise an ein Ereignis einer Schaltfläche anschließe. Irgendwelche Ideen?

Danke.

Antwort

4

Ich hatte das gleiche Problem, aber löste es. Versuchen Sie mit

-(void) awakeFromNib { 

} 

Es wird geladen, nachdem alles andere lädt.

+0

und es wird nur einmal geladen, was das sein könnte, was Sie erwarten, oder nicht – hhafez

+0

Vielen Dank dafür, super Tipp! –

+0

Ein Hinweis ist, dass, wenn Sie den UIImagePickerController zuerst laden wollen, wenn die App startet (wie ich), müssen Sie Ihren Code bei didFinishLaunching anstelle von watchFromNib einrichten, da watchFromNib passiert, bevor didFinishLaunch tut. – umop

-1

Es scheint, dass viewDidLoad zu früh ist, um presentModalViewController zu verwenden: animated :. Ich würde sugget ein One-Shot-Timer abzweigen Iteration das Verfahren ab dem nächsten Lauf Schleife zu nennen:

[NSTimer 
scheduledTimerWithTimeInterval:0 
target:self 
selector:@selector(onLoadTimer:) 
userInfo:nil 
repeats:NO]; 

die folgende Methode hinzu:

- (void)onLoadTimer:(id)unused 
{ 
    [self presentModalViewController:imagePickerController animated:YES]; 
    [imagePickerController release]; 
} 
+0

Danke für die Antwort, aber das scheint nicht zu funktionieren. Das Programm hängt an: [selbst anwesendModalViewController: imagePickerController animiert: YES]; – aloo

+1

Zwischen dem Erstellen der Ansicht und dem Zugriff auf die Benutzeroberfläche können viele Sekunden oder sogar Minuten liegen (normalerweise, wenn sie als Unteransicht zu einem anderen Element hinzugefügt oder einem nav/tab-Controller hinzugefügt werden. – Kevlar

3

Versuchen Sie den Code in

-(void)viewDidAppear 
setzen

Das wird sogar jedes Mal ausgeführt, wenn die Ansicht auf dem Bildschirm erscheint (auch wenn es nach dem Schließen von UIImagePicker angezeigt wird), also müssen Sie möglicherweise einen BOOL-Wert hinzufügen, damit er nur beim ersten Mal auftritt ws oder wann du es willst (d. h. nicht nach dem Verwerfen einer modalen Ansicht).

+0

. Wenn ein View-Controller irgendwie keinen Zugriff auf die angezeigte Benutzeroberfläche hat, kann er nicht auf die von Ihnen gewünschte Weise interagieren, denke ich. – Kevlar