5

iOS 6 以降 (私のアプリは 7.0 以降) の状態保持を使用して、別のビュー コントローラーからモーダルに表示されるビューを保持しようとしています。そのため、典型的なモーダル ビュー コントローラーの却下パターンがあります。

TNTLoginViewController.h の内容

@protocol TNTLoginViewControllerDelegate <NSObject>

- (void)TNTLoginViewControllerDismiss:(TNTLoginViewController *)controller;

@end

@interface TNTLoginViewControllerDelegate : NSObject

@interface TNTLoginViewController : UIViewController

@property (weak, nonatomic) IBOutlet id <TNTLoginViewControllerDelegate> delegate;

- (IBAction)getStarted:(id)sender;

@end

getStarted: 実装

- (IBAction)getStarted:(id)sender
{
    // Perform login
    ...

    // Dismiss me
    [self.delegate TNTLoginViewControllerDismiss:self];
}

TNTLoginViewControllerDismiss: モーダルを提示したデリゲートのメソッド

- (void)TNTLoginViewControllerDismiss:(TNTLoginViewController *)controller
{
    [self dismissViewControllerAnimated:YES completion:nil];
}

そして、それはすべて魅力のように機能します!状態保存まで。簡単に言えば、TNTLoginViewController がデリゲートを保持する方法がわかりません。それができない理由を理解しています。それは単なるポインタです! そこで、代わりにデリゲートを導出するさまざまな方法を試しました。

  1. 復元クラス: 残念ながら、クラス メソッドとしてviewControllerWithRestorationIdentifierPath:coder:、特定の提示ビュー コントローラーを指すのに役立ちません。
  2. TNTLogingViewControllerDelegate>ストーリーボードで、提示する VC をモーダル VC のデリゲートとして設定します。提示する VC のクラスがヘッダーでプロトコルを公に採用した場合でも、Xcode ではその接続を描画できません。それは別の問題かもしれませんし、許可されていないかもしれません。
  3. application-delegate-levelapplication:viewControllerWithRestorationIdentifierPath:coder:を使用して、モーダル ビュー コントローラーを返し、そのデリゲートを提示ビュー コントローラーに設定します。App Delegate からその提示 VC を取得できなければなりませんが、うまくいくかもしれません。

今のところ #3 を使用しますが、誰かが推奨できるより良い解決策があれば、私はわくわくします.

同様の問題が発生するセットアップ:

  1. テーブルビューなどのデータソースを設定します。
4

1 に答える 1