2013-10-24 14 views
10

私はpresentViewControllerの変更をリッスンしようとしていますが、そのプロパティがKVOに準拠していない(または少なくとも私は変更を取得できません)ようです。 UIViewControllerがアクティブに提示されたときに変更をリッスンするUIViewControllerの方法はありますか?あなたがのUIViewControllerのインスタンスを積極的に提示されたかどうかを知りたい理由renderedViewController Changes KVO

+0

カスタム封じ込めが進むべき道であるように感じます。思考? – user2916412

答えて

-6

は、私が使用して、理解していない:

@property(nonatomic,readonly) UIViewController *presentedViewController; 

でもねえ、あなたは上司です。私は、一意のビューコントローラの例を考えています。一度だけ表示する必要がありますが、あなたの基準に一致するかどうかはわかりません。ソースファイル内の

+ (MyViewController *)instance; 

static MyViewController *instance = nil; 

@implementation MyViewController 

+ (MyViewController *)instance 
{ 
    return instance; 
} 


- (void)viewDidLoad 
{ 
    instance = self; 
    [super viewDidLoad]; 
    // ... 
} 

私は最善の方法は、ヘッダファイルの例

ため、インスタンスが私の先端:)ある単語を使用して、だと思います

今すぐアプリケーションの他の部分から:

if ([[MyViewController instance] presentedViewController]) 
{ 
    // here I'm been presented 
} 
1

presentedViewControllerはKVO準拠ではありませんが、UIViewControllerの関連プレゼンテーション/解雇メソッドをオーバーライドすることにより、変更を通知することが可能である:

override func presentViewController(viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)?) { 
    // will present view controller 
    super.presentViewController(viewControllerToPresent, animated: flag, completion: completion) 
} 

override func dismissViewControllerAnimated(flag: Bool, completion: (() -> Void)?) { 
    super.dismissViewControllerAnimated(flag, completion: completion) 
    // did dismiss view controller 
}