Frage

Ich habe Probleme mit der -dismissModalViewControllerAnimated bekommen: an der Arbeit auf dem iPad (als iPhone-App). Aus irgendeinem Grund scheint es nichts zu tun.

I rufen -presentModalViewController: animated: in Mainviewcontroller, worauf habe ich versucht, den Aufruf der -dismissModalViewController von der präsentierten View-Controller (mit [self dismissModalViewController ] ), die ich verstehe die Anforderung an den Mainviewcontroller nach vorn. Ich habe auch versucht, einen Delegaten in der dargestellten View-Controller-Einstellung ( viewControllerAboutToBePresented.delegate = self; ), und dann ruft [self.delegate dismissModalViewController: JA] . Weder Ansatz scheint, etwas zu tun, wenn ich den iPhone-App auf dem iPad laufen.

Wie kann ich den modal-View-Controller auf dem iPad entlassen?

War es hilfreich?

Lösung

Ich hatte dies das erste Mal, dass ich ein iPhone-Projekt auf das iPad portiert - es war [self dismissModalViewControllerAnimated:], die leise versagt wurde. Das Projekt wurde mit Cocoa View-Controller über einen OpenGL Hintergrund, und ich dachte, es etwas damit zu tun.

Aufgrund der unglaublich kurzen Frist, ich hatte keine Zeit, um herauszufinden, was los war, und so dass ich nur die modale Ansicht als ein Subview der aktuellen View-Controller hinzugefügt, und es entfernt, wenn ich fertig war. (Ja, ein Hack, aber das ist Zeitplan für ya ...)

Andere Tipps

I woud schreibe dies als Kommentar, aber ich bin nicht in der Lage, dies zu tun.

Ist die Hauptansicht-Controller, rufen sollte dismissModelViewControllerAnimated: . Sie können entweder Anruf [[self parent] dismissModalViewControllerAnimated:] im View-Controller vorgestellt, oder ein Verfahren in einem Protokoll festzulegen, dass die modale View-Controller zurückzuweisen und das Protokoll in der Hauptansicht-Controller implementieren, legen Sie es als der Vertreter der dargebotenen view-Controller und rufen die Verfahren von ihm. Sie tun es der falsche Weg. Es könnte oder nicht Ihr Problem lösen.

Update (Codebeispiel ist auf Kommentare nicht verfügbar):

Auf dem Mainviewcontroller sollten Sie etwas davon haben

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // In this case is inside a tableviewmethod, but it could really be an action associated with a button.

    DetailViewController *controller = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];
    [controller setDelegate:self]; // The delegate is the parent and is assigned, not retained.

    // Modal presentation style is only used on iPad. On iPhone is always full screen.
    // [controller setModalPresentationStyle:UIModalPresentationFullScreen];

    [controller setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    [self presentModalViewController:controller animated:YES];
    [controller release]; // It will be deallocated upon dismissal.
}

-(void)dismissDetailViewControllerAndProcessData:(NSDictionary *)data {

    // Do something with the data passed.
    [self processData:data];

    // Dismiss the modalviewcontroller associated with this viewcontroller.
    [self dismissModalViewControllerAnimated:YES];
}

, während auf den Detailansicht-Controller als Modal-View-Controller vorgestellt, benötigte das einzige, was ist so etwas wie dies

-(void)actionBack:(id)sender {

    // Call the delegate method. If you just need to dimiss the controller, just
    // call
    // [[self parentViewController]dismissModalViewControllerAnimated:YES];
    // and don't even bother to set up a delegate and a delegate method.

    [delegate dismissDetailViewControllerAndProcessData:nil]; // Call the parent dismissal method.
}

aber wenn die Anwendung fein auf dem iPhone läuft, sollte es nur so fein auf dem iPad als iPhone-App ausgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top