2012-03-30 10 views
3
Abweisung

Diese auf dem iPhone funktioniert BTW (beide mit iOS 5.1)App friert ein, wenn auf dem iPad Modal-View-Controller

Meine app friert, wenn ich rufe [self dismissModalViewControllerAnimated:NO];

Ich habe viele verschiedene Ansätze versucht:

Mein Code, wie ich es haben jetzt:

-(void) doneEditing:(NSString *)value 
{ 
    [multiLineText dismissModalViewControllerAnimated:NO]; 
    self.currentActiveTextView.text = value; 
    self.currentActiveTextView = nil; 
} 

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    multiLineText = [[MultilineTextViewController alloc] init]; 
    multiLineText.delegate = self; 
    multiLineText.text = textView.text; 
    self.currentActiveTextView = textView; 
    [self presentModalViewController:multiLineText animated:NO]; 
} 

MultilineTextViewController.h

@protocol DoneEditing 
    -(void)doneEditing:(NSString*)value; 
@end 

@interface MultilineTextViewController : UIViewController 
{ 
    UITextView *inputText; 
    id<DoneEditing> delegate; 
} 
@property (nonatomic, strong) NSString *text; 
@property (nonatomic, strong) id<DoneEditing> delegate; 
@end 

Funktion aus einer getan Schaltfläche namens

-(void) done:(id)sender 
{ 
    [delegate doneEditing:inputText.text]; 
} 

ich die modal in meiner getan Funktion entlassen habe versucht Ich habe es an beiden Orten mit Selbst versucht Ich habe dies auch versucht, in MultilineTextViewController

if ([[self parentViewController] respondsToSelector:@selector(dismissModalViewControllerAnimated:)]){ 

    [[self parentViewController] dismissModalViewControllerAnimated:NO]; 

} else { 

    [[self presentingViewController] dismissViewControllerAnimated:NO completion:nil]; 
} 

Nur ein wenig Geschichte, wenn ein Benutzer auf eine UITextView klicke Ich benutze, um eine neue ModalViewController zu öffnen, um dem Benutzer mehr Platz zu erlauben, große Mengen an Text einzugeben, a Nach der Fertigstellung drückt der Benutzer done und ich rufe die Delegate-Methode auf, um den Text auf das ursprüngliche Formular zu setzen.

Wenn ich ja in einem der oben angegebenen Fälle animiert ändern Sie es noch nicht, aber ich die Irgendwelche Ideen NSInternalInconsistencyException

Attempting to begin a modal transition from <WorkflowViewController: 0xc6846b0> to <MultilineTextViewController: 0xc64b960> while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed 

bekommen statt Einfrieren funktioniert?

Ich kann nicht scheinen, einen Grund für diese Sache zu finden, das nicht zu arbeiten ...

Antwort

2

Seit seiner iPad vielleicht können Sie einen UIPopOverController verwenden, wenn Sie die Ansicht präsentieren wollen. Versuchen Sie, einen UIPopOverController zu erstellen, indem Sie ihn mit dem View-Controller für Ihre modale Ansicht initiieren. Sie können die Größe und den Speicherort festlegen. Sie können die Klasse, von der sie aufgerufen wird, als Delegat für die Ansicht festlegen, sodass Sie Benachrichtigungen erhalten können.

this helps

0

Versuchen:

[self dismissModalViewControllerAnimated:NO]; 
+0

In welchem ​​Teil meines Codes? – Armand

+0

_Ich habe versucht, das modale in meiner done -Funktion zu verwerfen_ - ich denke, in Ihrer Funktion getan :) – beryllium

+0

Haha gerade versucht es dort, aber dann friert die App nur und tut nichts und reagiert auf nichts – Armand

0

Versuchen Sie überprüfen, wie oft doneEditing zum Beispiel genannt werden wird mit einem NSLog dort rein.

Edit:

Versuchen Hinzufügen Verzögerung, bevor die modalViewController Entlassung:

[self performSelector:@selector(dismiss) withObject:nil afterDelay:1.0]; 

- (void)dismiss { 
    [self dismissModalViewControllerAnimated:NO]; 
} 
+0

Es wird nur einmal aufgerufen – Armand

+0

ok, wird ViewDidAppear in Ihrem WorkflowViewController tatsächlich aufgerufen werden? oh und wie oft wird textViewDidBeginEditing aufgerufen (vielleicht präsentieren Sie WorkflowViewController mehr als einmal). – ader

+0

ein anderer Gedanke, haben Sie versucht, entlassenModalViewControllerAnimated nach einer kurzen Verzögerung, wie eine halbe Sekunde später. Siehe oben Bearbeiten. – ader

0

Stellen Sie sicher, dass Ihre Textansicht seinen ersten Responder-Status richtig tritt zurück bevor sie vom Bildschirm zu entlassen.

Etwas wie: [inputText resignFirstResponder];

0

versuchen diese

[multiLineText popViewControllerAnimated: YES];

0

Ich verstehe nicht Ihre Linie

[multiLineText dismissModalViewControllerAnimated:NO]; 

seit multiLineText es Ihren modal View-Controller, hat die entlassen durch den View-Controller präsentiert sie aufgerufen werden, das heißt, in Ihrem ersten Beispiel (da Sie festgelegt haben delegieren an den präsentierenden View-Controller)

[multiLineText.delegate dismissModalViewControllerAnimated:NO]; 

sollte funktionieren. Sie setzen Delegat auf Null, um zu vermeiden, zweimal zu entlassen.

0

In den letzten Versionen von iOS können Sie die Nachricht "discussModalViewControllerAnimated:" an das Modal selbst senden.

Apple jongliert die Art und Weise, die dies in letzter Zeit funktioniert. Versuchen Sie, das Modal selbst zu senden.

Verwandte Themen