하위 뷰를 하나씩 제거하는 대신 슈퍼 뷰에서 모든 하위 뷰를 한 번에 제거하는 간단한 방법을 찾고 있습니다.
//I'm trying something like this, but is not working
let theSubviews : Array = container_view.subviews
for (view : NSView) in theSubviews {
view.removeFromSuperview(container_view)
}
내가 무엇을 놓치고 있습니까?
최신 정보
내 앱에는 메인이 container_view
있습니다. container_view
일종의 탐색을 제공하기 위해 다른보기를 하위보기로 추가해야합니다 .
따라서 특정 페이지를 “열기”위해 단추를 클릭하면 모든 하위보기를 제거하고 새 페이지를 추가해야합니다.
업데이트 2-작동하는 솔루션 (OS X)
애플이 고쳤다 고 생각합니다.
이제는 그 어느 때보 다 쉬워졌습니다.
for view in containerView.subviews{
view.removeFromSuperview()
}
답변
편집 : (예레미야 / 롤로 감사)
iOS 용 Swift에서이를 수행하는 가장 좋은 방법은 다음과 같습니다.
view.subviews.forEach({ $0.removeFromSuperview() }) // this gets things done
view.subviews.map({ $0.removeFromSuperview() }) // this returns modified array
^^이 기능은 재미 있습니다!
let funTimes = ["Awesome","Crazy","WTF"]
extension String {
func readIt() {
print(self)
}
}
funTimes.forEach({ $0.readIt() })
//// 편집 종료
그냥 이렇게 :
for view in self.view.subviews {
view.removeFromSuperview()
}
또는 특정 수업을 찾고 있다면
for view:CustomViewClass! in self.view.subviews {
if view.isKindOfClass(CustomViewClass) {
view.doClassThing()
}
}
답변
iOS / Swift의 경우 내가 사용하는 모든 하위 뷰를 제거하려면 다음을 수행하십시오.
for v in view.subviews{
v.removeFromSuperview()
}
UILabel과 같은 특정 클래스의 모든 하위 뷰를 제거하려면 다음을 사용하십시오.
for v in view.subviews{
if v is UILabel{
v.removeFromSuperview()
}
}
답변
코드는 다음과 같이 간단하게 작성할 수 있습니다.
view.subviews.forEach { $0.removeFromSuperview() }
답변
이것이 가장 간단한 해결책이어야합니다.
let container_view: NSView = ...
container_view.subviews = []
( 다른 방법은 모든 하위 보기 제거? 를 참조 하십시오 )
이것은 참고 맥 OS 질문이 대답에 대해서만 작동 맥 OS . iOS에서는 작동하지 않습니다.
답변
이 문제를 해결할 수 있었는지 모르겠지만 최근에 For 루프가 매번 하나의 뷰를 남겨 두는 비슷한 문제가 발생했습니다. removeFromSuperview ()가 호출되었을 때 self.subviews가 변경 되었기 때문일 수 있습니다.
이 문제를 해결하려면 다음을 수행하십시오.
let subViews: Array = self.subviews.copy()
for (var subview: NSView!) in subViews
{
subview.removeFromSuperview()
}
.copy ()를 수행하면 self.subviews 배열을 변경하면서 각 하위보기를 제거 할 수 있습니다. 복사 된 배열 (subViews)에는 객체에 대한 모든 참조가 포함되어 있고 변경되지 않았기 때문입니다.
편집 : 귀하의 경우에는 다음을 사용한다고 생각합니다.
let theSubviews: Array = container_view.subviews.copy()
for (var view: NSView!) in theSubviews
{
view.removeFromSuperview()
}
답변
이 시도:
for view in container_view.subviews {
view.removeFromSuperview()
}
답변
모든 서브 뷰를 제거하기위한 확장 기능으로 빠르게 제거됩니다.
import Foundation
import UIKit
extension UIView {
/// Remove allSubView in view
func removeAllSubViews() {
self.subviews.forEach({ $0.removeFromSuperview() })
}
}