1

FirstVC画面内から別の画面を開いて、もう一度閉じることができるようにする通常の方法は、次のようになります。

    SecondVC *secondVC = [[SecondVC alloc] initWithNibName:@"SecondVC" bundle:nil];
    secondVC.delegate = self; //needed to dismiss
    [self presentModalViewController: secondVC animated: YES];

一方、SecondVC.mSecondVCを閉じるために呼び出されたメソッドを宣言するプロトコルをインポートする必要があります

SecondVCProtocol.hしたがって、基本的に次のようなプロトコルファイルを常に作成する必要があります。

@protocol SecondVCProtocol <NSObject>
-(void)secondVCDidFinish;
@end

次に、このファイルSecondVC.mをインポートする必要があり、最終的に呼び出すことができますSecondVCProtocol.h

 [self.delegate    secondVCDidFinish]

私はちょうど別のAndroidアプリを完成させ、iOSの世界に戻ってきましたが、これはかなり面倒だと思います。-別のファイルでそのようなプロトコルを定義する必要があり、デリゲートを使用する必要があります-すべて、画面を閉じるなどの最も通常のタスクを実行するためだけに...

より簡単で複雑でない方法はありませんか、それともこれはまさにそれが行われなければならない方法ですか?

たとえば[self dismiss]、SecondVCのように(デリゲートもプロトコルもありません)、彼は本当に素晴らしいと思いませんか?

どうもありがとう!

4

2 に答える 2

4

あなたはただ呼び出すことができます

dismissViewControllerAnimated:completion:

提示されたビューコントローラで。ただし、これは正確にはベストプラクティスではありません。

Appleのドキュメントから:

提示するビューコントローラは、提示したビューコントローラを閉じる責任があります。提示されたViewController自体でこのメソッドを呼び出すと、提示されたViewControllerにメッセージが自動的に転送されます。

ただし、Appleのドキュメントからも(http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

提示されたビューコントローラを却下するときが来たとき、好ましいアプローチは、提示されたビューコントローラにそれを却下させることである。言い換えると、可能な場合は常に、ViewControllerを提示したのと同じViewControllerがそれを却下する責任を負う必要があります。提示されたビューコントローラを却下する必要があることを提示するビューコントローラに通知するためのいくつかの手法がありますが、推奨される手法は委任です。

于 2012-07-21T22:31:15.387 に答える
2

あなたが説明することは、最も簡単なパターンではありません。実際には、あなたが提案したことと非常によく似た何かをする必要があります。SecondVCを却下する準備ができたら、次のように呼び出すだけです。

[self dismissViewControllerAnimated:YES completion:NULL];

UIViewControllerのドキュメントから:

提示するビューコントローラは、提示したビューコントローラを閉じる責任があります。提示されたViewController自体でこのメソッドを呼び出すと、提示されたViewControllerにメッセージが自動的に転送されます。

于 2012-07-21T22:28:48.923 に答える