신속한 addsubview 및 제거


82

탭 한 번으로 하위보기를 추가하고 제거하고 싶습니다. 이것은 내 코드입니다.

/ * 하위보기를 추가하려면 * /

var testView: UIView = UIView(frame: CGRectMake(0, 0, 320, 568))
testView.backgroundColor = UIColor.blueColor()
testView.alpha = 0.5
testView.tag = 100
super.view.userInteractionEnabled = false
self.view.userInteractionEnabled = true
self.view.addSubview(testView)

/ * 하위보기를 제거하려면 * /

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    let touch = touches.anyObject() as UITouch
    let point = touch.locationInView(self.view)

    if(testView.tag==100){
        println("Tag 100")
        testView.removeFromSuperview()
    }
    else{
        println("tag not found")
    }

}

그러나 제거가 작동하지 않습니다 누군가가 나를 도울 수 있습니까? 감사!


"작동하지 않음"은 무엇을 의미합니까? 추가? 제거? 오류? 자세한 정보를 포함하도록 질문을 수정하십시오.
ABMagil

1
testView는 self.view가 아니라 태그가 100 인 뷰이므로 if 문이 실행되지 않습니다.
rdelmar 15.01.28

대답 해줘서 고마워요. 그것은 지금 편집됩니다
Dasoga

답변:


99

도와 주셔서 감사합니다. 이것이 해결책입니다. 저는 서브 뷰를 생성했고 그것을 제거하기위한 제스처를 추가했습니다.

@IBAction func infoView(sender: UIButton) {
    var testView: UIView = UIView(frame: CGRectMake(0, 0, 320, 568))
    testView.backgroundColor = UIColor.blueColor()
    testView.alpha = 0.5
    testView.tag = 100
    testView.userInteractionEnabled = true
    self.view.addSubview(testView)

    let aSelector : Selector = "removeSubview"
    let tapGesture = UITapGestureRecognizer(target:self, action: aSelector)
    testView.addGestureRecognizer(tapGesture)
}

func removeSubview(){
    println("Start remove sibview")
    if let viewWithTag = self.view.viewWithTag(100) {
        viewWithTag.removeFromSuperview()
    }else{
        println("No!")
    }
}

최신 정보:

Swift 3+

@IBAction func infoView(sender: UIButton) {
    let testView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 568))
    testView.backgroundColor = .blue
    testView.alpha = 0.5
    testView.tag = 100
    testView.isUserInteractionEnabled = true
    self.view.addSubview(testView)

    let aSelector : Selector = #selector(GasMapViewController.removeSubview)
    let tapGesture = UITapGestureRecognizer(target:self, action: aSelector)
    testView.addGestureRecognizer(tapGesture)
}

func removeSubview(){
    print("Start remove sibview")
    if let viewWithTag = self.view.viewWithTag(100) {
        viewWithTag.removeFromSuperview()
    }else{
        print("No!")
    }
}

75

viewWithTag주어진으로 뷰를 찾으려면 함수 를 사용해야합니다 tag.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    let touch = touches.anyObject() as UITouch
    let point = touch.locationInView(self.view)

    if let viewWithTag = self.view.viewWithTag(100) {
        print("Tag 100")
        viewWithTag.removeFromSuperview()
    } else {
        print("tag not found")
    }
}

감사! 실제로 이것은 내 문제를 해결했습니다. 그러나 슈퍼 뷰와의 상호 작용은 비활성화되지 않습니다. 수퍼 뷰와의 상호 작용을 비활성화하려면 어떻게합니까?
Dasoga

이해하지 못했습니다. 슈퍼 뷰와 어떤 상호 작용을하나요?
rakeshbs

나는 첫 번째보기에서 탭 제스처를 가지고 있으며 버튼을 사용하여 하위보기를 추가했지만 정보보기 일뿐이므로 탭으로 제거하고 싶습니다. 이제 제거 탭이 작동합니다. 하지만 첫 번째보기에서 동일한 탭을 수신합니다. 해당 탭을 비활성화해야합니다 ... 감사합니다 !!
Dasoga

정보보기를 제거하려면 어디를 탭 하시겠습니까? 정보보기가 외부가 아닌 내부를 탭할 때보기를 제거 하시겠습니까?
rakeshbs

예, 사용자가 정보보기 (두 번째보기)를 탭하면 해당보기 (두 번째보기)를 제거하고 첫 번째 보기를 다시 표시하고 싶습니다 .
Dasoga

2

콘센트 또는 프로그래밍 코드를 통해 액세스 할 수 있다고 가정하면 뷰 fooremoveFromSuperview메서드를 참조하여 제거 할 수 있습니다.

foo.removeFromSuperview()

0

내 사용자 지정 CollectionViewCell 내부에 뷰가 있고 해당 뷰에 그래프를 포함합니다. 새로 고침하려면 해당 뷰에 이미 그래프가 있는지 확인하고 제거하고 새로 적용해야합니다. 여기에 해결책이 있습니다

cell.cellView.addSubview(graph)
graph.tag = 10

이제 제거하려는 코드 블록에서 (귀하의 경우 gestureRecognizerFunction)

if let removable = cell.cellView.viewWithTag(10){
   removable.removeFromSuperview()
}

다시 삽입하려면

cell.cellView.addSubview(graph)
graph.tag = 10

-9

XCode 8 및 Swift 3을 사용하여이 코드를 테스트했습니다.

SuperView에 사용자 정의보기를 추가하려면 다음을 사용하십시오.

self.view.addSubview(myView)

Superview에서 사용자 정의보기를 제거하려면 다음을 사용하십시오.

self.view.willRemoveSubview(myView)


8
willRemoveSubview는 수퍼 뷰에서 서브 뷰를 제거하지 않습니다. 서브 뷰가 제거 될 때만 알려줍니다.
무라트 Yasar

3
수퍼 하나에서 사용자 정의보기를 제거하려면 사용해야합니다 myView.removeFromSuperview ()
야로 슬라브 바이

1
willRemoveSubview는 수퍼 뷰에서 서브 뷰를 제거하지 않습니다.
Imtee
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.