2017-06-21 57 views
1

我有一個問題,如果我從超級視圖中刪除子視圖,然後當我推到另一個VC和回來所有刪除的子視圖重新出現在視圖中我已經試過一切,並檢查我的代碼如果viewDidApper也是。UIView甚至在開始從超級視圖中刪除後重新出現

enter image description here

//HERE IS HOW I ADD VIEWS 

func addusers() { 

    for user in 0...5 { 
     let radarButton = PRButton(frame: CGRect(x: 0, y: 0, width: itemSize.width, height: itemSize.height+14)) 
     radarButton.profileButton?.setImage(UIImage(named: "dummy-avatar.png"), for: UIControlState()) 
     radarButton.profileName.setTitle("test \(user)", for: .normal) 

     repeat { 
      let center = generateCenterPointInRadar() 
      radarButton.center = CGPoint(x: center.x, y: center.y) 

     } while (itemFrameIntersectsInOtherItem(radarButton.frame)) 
     radarButton.profileButton?.addTarget(self, action: #selector(didTapUser), for: .touchUpInside) 
     radarButton.profileName?.addTarget(self, action: #selector(didTapUser), for: .touchUpInside) 
     self.addSubview(radarButton) 
     items.append(radarButton) 
    } 

} 

//HERE IS HOW I REMOVE VIEWS 
func removeAllUsers() { 
    for view in self.subviews { 
     if view is PRButton { 
      view.removeFromSuperview() 
     } 
    } 
    items.removeAll() 

} 
//Remove from superview 
    override func removeFromSuperview() { 

     UIView.beginAnimations("", context: nil) 
     UIView.setAnimationDuration(1) 
     self.alpha = 0 
     UIView.setAnimationDidStop(Selector(("callSuperRemoveFromSuperview"))) 
     UIView.commitAnimations() 

    } 

fileprivate func callSuperRemoveFromSuperview() { 
    super.removeFromSuperview() 
} 

在此先感謝

+0

您確定視圖不在另一個視圖容器內嗎? – Edu

+0

@Edu我相信我已經包含了一個測試項目,您可以下載並檢查 –

回答

1

首先要看看......

PRButton您覆蓋removeFromSuperview() - 但你的結構是不正確的,你永遠不會真正刪除視圖。

這種替換:

override func removeFromSuperview() { 

    UIView.animate(withDuration: 1.0, animations: ({ 
     self.alpha = 0.0 
    }), completion: { _ in 
     self.callSuperRemoveFromSuperview() 
    }) 

} 

你也可以簡單地調用super.removeFromSuperview()而不是你的額外self.callSuperRemoveFromSuperview()功能。

瞭解Debug View Hierarchy功能...您會立即看到該功能。

+0

他可以在開始時簡單地調用super.removeFromSuperView()嗎? – Larry

+0

這將失去「淡入淡出」動畫。他*也可以修復他的'.setAnimationDidStop'選擇器......但是塊格式通常被認爲是「未來之路」(取決於意見)。 – DonMag

+0

@DonMag謝謝修復它我生病總是使用塊格式功能,幫助了很多:) –

2

我看了看測試項目。 我想我找到了問題,這是在override func removeFromSuperview() 我註釋掉它和編輯removeAllUsers()

func removeAllUsers() { 
    for view in self.subviews { 
     if view is PRButton { 
      UIView.animate(withDuration: 1, animations: { 
      view.alpha = 0 
      }, completion: { (finished) in 
      view.removeFromSuperview() 
      }) 
     } 
    } 
    items.removeAll() 

} 

現在,我看不出有任何重複的用戶,而我回viewController

+0

謝謝,修復removeFromSuperview()解決了我的問題 –

相關問題