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 2015年

1
testViewは、self.viewではなくタグ100のビューであるため、ifステートメントは実行されません。
rdelmar 2015年

ご回答ありがとうございます。現在編集中
Dasoga 2015年

回答:


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 2015年

分かりませんでした。スーパービューとの相互作用は何ですか?
rakeshbs 2015年

最初のビューでタップジェスチャがあります。ボタンを押した後、サブビューを追加しますが、これは単なる情報ビューなので、タップすると削除します。現在、削除タップが機能しています。しかし、最初のビューでは、同じタップを受け取ります。そのタップを無効にする必要があります...ありがとう!!
dasoga 2015年

情報ビューを削除するためにどこをタップしますか?情報ビューが外側ではなく内側でタップされたときにビューを削除しますか?
rakeshbs 2015年

はい、ユーザーが情報ビュー(2番目のビュー)をタップしたときに、そのビュー(2番目のビュー)を削除して、最初のビューを再度表示したいと思います。
dasoga 2015年

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

XCode8とSwift3を使用してこのコードをテストしました

SuperViewにカスタムビューを追加するには、次を使用します。

self.view.addSubview(myView)

スーパービューからカスタムビューを削除するには、次を使用します。

self.view.willRemoveSubview(myView)


8
willRemoveSubviewは、スーパービューからサブビューを削除しません。サブビューが削除されようとしているときにのみ通知します。
Murat Yasar 2017

3
スーパービューからカスタムビューを削除するには、myView.removeFromSuperview()を使用する必要があります
Yaroslav Bai

1
willRemoveSubviewは、スーパービューからサブビューを削除しません。
Imtee 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.