20

didRemoveFromSuperviewUIViewには" "や" "のようなメソッドがないようです。次に、willRemoveFromSuperviewUIViewがsuperViewから削除されたときにイベントをリッスンする方法は?KVOを使用する必要がありますか?前もって感謝します!

4

4 に答える 4

28

これは機能します(iOS8でテスト済み):

-(void) didMoveToWindow {
    [super didMoveToWindow]; // (does nothing by default)
    if (self.window == nil) {
        // YOUR CODE FOR WHEN UIVIEW IS REMOVED
    }
}

UIViewドキュメントによると

このメソッドのデフォルトの実装は何もしません。サブクラスはそれをオーバーライドして、ウィンドウが変更されるたびに追加のアクションを実行できます。

ウィンドウ プロパティが nilの可能性があります。これは、レシーバーがスーパービューから削除されたばかりか、ウィンドウに関連付けられていないスーパービューにレシーバーが追加されたときに発生します。

于 2015-06-18T22:41:38.767 に答える
28

このトピックはかなり古いですが、私はそれを行う方法を見つけました.Google検索は十分に役に立たなかったので、ここにあります(UIViewのドキュメントから取得)

ビュー関連の変更の観察

– didAddSubview:

– willRemoveSubview:

– willMoveToSuperview:

– didMoveToSuperview

– willMoveToWindow:

– didMoveToWindow

于 2013-02-01T11:29:12.157 に答える
8
- (void) willMoveToSuperview: (UIView *) newSuperview{
    if(newSuperview == nil){
        // UIView was removed from superview
    } else {
        // UIView was added to superview
    }
}
于 2016-07-11T14:45:47.853 に答える
6

UIViewをサブクラス化し、その- (void)removeFromSuperviewメソッドから通知を投稿できます。

于 2010-06-19T08:42:48.417 に答える