2016-11-14 7 views
4

UIViewのremoveFromSuperviewdidMoveToSuperviewを呼び出す理由がわかりません。UIView removeFromSuperviewが呼び出されました.MoveToSuperview

didMoveToSuperviewは、ビューがビューに追加されたときにのみ呼び出されると思います。誰でもそれを説明することができますremoveFromSuperviewdidMoveToSuperviewを呼び出していますか?ここで

は、私がremoveFromSuperviewでやっているものです。ここで

public override func removeFromSuperview() { 

    clearDelegates() 

    chaosPad?.removeFromSuperview() 
    brushSliders?.removeFromSuperview() 
    moodSlider?.removeFromSuperview() 
    brushShapeMenu?.removeFromSuperview() 
    moodMenu?.removeFromSuperview() 
    gravityMenu?.removeFromSuperview() 
    rotationMenu?.removeFromSuperview() 

    menuGroups = [] 
    centerButtons = [] 
    scrollMenuItems = [] 
    menu?.removeFromSuperview() 
    menu = nil 

    super.removeFromSuperview() 
} 

func clearDelegates() { 
    chaosPad?.delegate = nil 
    viewController = nil 
} 

didMoveToSuperviewが呼び出されたかを示すコールスタックです:

#0 0x0000000110f39708 in specialized _fatalErrorMessage(StaticString, StaticString, StaticString, UInt) ->()() 
#1 0x000000010b9cb960 in TDTOilistMenuPainting.configureFrames() ->() at /FastDev/TDTPhotoLib/Oilist/Classes/TDTOilistMenuPainting.swift:161 
#2 0x000000010b9cb83e in TDTOilistMenuPainting.didMoveToSuperview() ->() at /FastDev/TDTPhotoLib/Oilist/Classes/TDTOilistMenuPainting.swift:146 
#3 0x000000010b9cb872 in @objc TDTOilistMenuPainting.didMoveToSuperview() ->()() 
#4 0x000000010f5d1db5 in __45-[UIView(Hierarchy) _postMovedFromSuperview:]_block_invoke() 
#5 0x000000010dc87c60 in -[NSISEngine withBehaviors:performModifications:]() 
#6 0x000000010f5d19b1 in -[UIView(Hierarchy) _postMovedFromSuperview:]() 
#7 0x000000010f5cf610 in __UIViewWasRemovedFromSuperview() 
#8 0x000000010f5cf107 in -[UIView(Hierarchy) removeFromSuperview]() 
#9 0x000000010b9c9aba in TDTOilistMenuPainting.removeFromSuperview() ->() at /FastDev/TDTPhotoLib/Oilist/Classes/TDTOilistMenuPainting.swift:73 
#10 0x000000010ba6d269 in TDTPaintingViewController.(navigationController(UINavigationController, animationControllerForOperation : UINavigationControllerOperation, fromViewController : UIViewController, toViewController : UIViewController) -> UIViewControllerAnimatedTransitioning?).(closure #2) at /FastDev/TDTPhotoLib/Oilist/Classes/TDTPaintingViewController.swift:2706 
+0

あなたは私がdidMoveToSuperview'は 'と思うだろう」と言ってもしかして ビューがビューに追加されたときにのみ呼び出される " – TylerTheCompiler

+0

はい、ありがとう、私は投稿を編集しました。 –

答えて

5

これは正常な動作です。 didMoveToSuperviewは、nilに変更されたとしても、ビューのスーパービューが変更されるたびに呼び出されます。スーパーは、それが追加されたりなど、そのスーパービューから削除されたかどうかを判断するために、そのメソッドの内部ではnilであるかどうかを確認するためにチェックすることができます。

override func didMoveToSuperview() { 
    if let superview = self.superview { 
     // the view was added as a subview to superview 
    } 
    else { 
     // the view was removed from its superview 
    } 
} 
+0

ご確認いただきありがとうございます。私はそれが呼ばれて驚いています。 –

+2

これは奇妙な名前のメソッドです私はAppleがそれを 'superviewDidChange'またはそれに類するものと名付けたはずだと思う。 – TylerTheCompiler

+2

私は完全に同意します! –

関連する問題