Comment appeler la méthode sur la présentation de-vue-contrôleur de modal-vue-contrôleur
J'ai un modal-vue-contrôleur que j'ai appelé à partir d'un autre point de vue contrôleur. Lors de la révocation de l'modal-vue-contrôleur, je veux une méthode pour être appelé sur le point de vue contrôleur présenté en vue modal. Quelle est la meilleure façon de le faire?
J'ai essayé de faire dans mon modal-vue-contrôleur: [(ParentViewController*)self.presentingViewController foo];
avant d'appeler [self dismissViewControllerAnimated:YES completion:nil];
.
Xcode me donne un message d'erreur indiquant que toto n'est pas reconnue, même si elle est définie et prototypée dans le contrôleur. Si votre solution implique des blocs, je ne comprends vraiment pas, donc en fait je l'apprécierais si vous voulez ajouter plus de détails. Merci.
ParentViewController.h
@interface ParentViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>
{
NewAssignmentViewController *newAssignmentViewController;
TableViewDataSource *data;
}
-(void)foo;
@end
Veuillez inclure le code que vous avez dans ParentViewController.h
Je ne pense pas que le problème n'est pas la mise en œuvre de foo parce que le programme se bloque, même si foo ne pas faire n'importe quoi
Mettre une bûche dans juste avant de rejeter le modèle-vue-contrôleur, NSLog(@"%@",[self.presentingViewController classe]) et de voir de quoi il en retourne
UITabBarController...
OriginalL'auteur Iowa15 | 2013-08-12
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour obtenir une référence correcte pour votre présentation contrôleur comme ceci:
L'autre façon de faire serait d'utiliser la délégation, mais c'est une réponse pour une autre fois.
OriginalL'auteur rdelmar
Si vous utilisez un Storyboard segue à présenter votre point de vue contrôleur vous pourriez le faire disparaître à l'aide d'un dérouleur Segue. Un dérouleur segue est un type spécial de la séquence qui se déroule à la vue des contrôleurs de retour à un présentateur.
Pour ce faire, vous devez créer une méthode dans la présentation de-vue-contrôleur avec la signature suivante:
Ceci est différent de celui d'un standard
IBAction
parce que le type de paramètre est unUIStoryboardSegue*
au lieu de la normaleid
type (il n'a pas à être nomméunwindSegue:
, il pourrait êtremodalViewFinished:
ou ce que vous voulez - l'important, c'est qu'il a un type de retour deIBAction
et un type de paramètre deUIStoryboardSegue*
).Une fois que vous avez cette méthode est définie, dans votre scénario, vous glisser à partir de la vue modal icône du contrôleur (en dessous de son point de vue, dans la petite barre d'icônes) et de la libération de la connexion sur le vert enseigne de sortie. Cela va créer un détendez-vous enchaîner, vous devez donner un
identifier
dans les attributs de l'inspecteur. Détendez-vous enchaîne ne sera pas affiché visuellement dans le storyboard de la toile, de sorte que vous trouverez dans la liste des éléments sur le côté gauche de la toile (c'est effondré par défaut, développez-la en cliquant sur le petit bouton circulaire dans le coin inférieur gauche de la toile).Une fois que vous avez fait cela, plutôt que d'appeler
[self dismissViewControllerAnimated:YES completion:nil]
, il suffit d'appeler[self performSegue:<Identifier you gave the unwind segue>]
à la place. Au cours de ce processus, leunwindAction:
méthode définie sur la présentation de la vue et le contrôleurprepareForSegue:
méthode sur le modèle-vue-contrôleur doit être invoquée. Vous pouvez le faire tout le nettoyage que vous devez faire dans ces méthodes (l'appel de lafoo
méthode deunwindSegue:
, par exemple).Ah, dommage, sortie enchaîne sont gentils.
Ouais je viens juste de commencer à apprendre programmation iPhone, mais je vais certainement utiliser la prochaine fois
Je reçois
Attempt to dismiss from view controller <MyTabBarController: 0xc233600> while a presentation or dismiss is in progress!
aprèsmodalViewFinished:
est invoquée. Modal affichage d'affichage à l'écran. Que puis-je faire ?Ça sonne un peu comme avoir encore de code qui est explicitement rejetant votre vue-contrôleur quelque part. Vous aurez besoin de l'enlever, de le détendre segue fait pour vous.
OriginalL'auteur Charles A.
Vous appelez la méthode sur le UIViewController qui est votre MainView, et passez votre UIViewController vous voulez être le ActionSheet.
De rejeter la UIActionSheet, dimissWithClickedButtonIndex:animation: est une méthode pour la UIActionSheet que vous pouvez mettre en œuvre. La méthode peut être appelée par quiconque (donc, si vous voulez la faire disparaître de votre mainview avoir une référence à la feuille d'action et de faire quelque chose comme
La méthode est également appelée chaque fois que le bouton "annuler" est cliqué par l'utilisateur.
Utiliser cette ModalViewControllers lien pour mieux comprendre...!
Je ne suis pas encore tout à fait claire sur ce point. Ce que je veux faire de mon modal-vue-contrôleur appeler une méthode sur la vue-contrôleur qui l'a présenté
L'utiliser par la création d'une référence de votre auto.presentingViewController classe Maclasse *myclassObject = [[Maclasse alloc]init]; [myclassObject foo];
Ok j'arrive. Laissez-moi essayer
Je reçois un avertissement qui dit: incompatible types de pointeur de l'affectation à Maclasse __fortes "à partir de" UIViewController'
OriginalL'auteur chandan