Swift addubview và xóa nó


81

Tôi muốn thêm chế độ xem phụ và xóa bằng một lần nhấn. Đây là mã của tôi:

/ * Để thêm lượt xem phụ * /

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)

/ * Để xóa lượt xem phụ * /

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")
    }

}

Nhưng xóa nó không hoạt động Ai đó có thể giúp tôi không? Cảm ơn!


"Không hoạt động" có nghĩa là gì? Việc thêm vào? Việc loại bỏ? Lỗi? Vui lòng chỉnh sửa câu hỏi của bạn để bao gồm thêm thông tin.
ABMagil

1
testView là chế độ xem có thẻ 100, không phải self.view, vì vậy câu lệnh if của bạn không bao giờ được thực thi.
rdelmar

Cảm ơn về câu trả lời. Nó được chỉnh sửa ngay bây giờ
Dasoga

Câu trả lời:


99

Cảm ơn vì sự giúp đỡ. Đây là giải pháp: Tôi đã tạo chế độ xem phụ và thêm một cử chỉ để xóa nó

@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!")
    }
}

Cập nhật:

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!")
    }
}

73

Bạn phải sử dụng viewWithTagchức năng để tìm khung nhìn với hình đã cho 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")
    }
}

Cảm ơn! thực sự điều này đã giải quyết vấn đề của tôi. Nhưng tương tác với de super view nó không vô hiệu hóa. Làm cách nào để vô hiệu hóa tương tác với chế độ xem siêu cao?
Dasoga

Tôi không hiểu. Tương tác gì với superview?
rakeshbs

Tôi có một cử chỉ nhấn trong chế độ xem đầu tiên, sau khi nhấn nút, tôi thêm một chế độ xem phụ, nhưng chỉ là một chế độ xem thông tin, vì vậy, với một lần nhấn ai đó muốn xóa nó. Bây giờ nó đang hoạt động với vòi loại bỏ. Nhưng ở chế độ xem đầu tiên, tôi nhận được cùng một vòi, tôi cần phải tắt vòi đó ... cảm ơn !!
Dasoga

Bạn muốn nhấn vào đâu để xóa chế độ xem thông tin? Bạn có muốn xóa chế độ xem khi chế độ xem thông tin được nhấn vào bên trong chứ không phải bên ngoài?
rakeshbs

Có, khi người dùng chạm vào chế độ xem thông tin (chế độ xem thứ hai), tôi muốn xóa chế độ xem đó (chế độ xem thứ hai) và hiển thị lại chế độ xem đầu tiên .
Dasoga

2

Giả sử bạn có quyền truy cập vào nó thông qua các cửa hàng hoặc mã lập trình, bạn có thể xóa nó bằng cách tham khảo chế độ xem của bạn fooremoveFromSuperviewphương pháp

foo.removeFromSuperview()

0

Tôi đã xem một chế độ xem bên trong CollectionViewCell tùy chỉnh của mình và nhúng biểu đồ vào chế độ xem đó. Để làm mới nó, tôi phải kiểm tra xem đã có một biểu đồ nào được đặt trên dạng xem đó chưa, hãy xóa nó và sau đó áp dụng mới. Đây là giải pháp

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

bây giờ, trong khối mã nơi bạn muốn loại bỏ nó (trong trường hợp của bạn là cử chỉ cử chỉ)

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

để nhúng lại

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

-9

Đã kiểm tra mã này bằng XCode 8 và Swift 3

Để thêm Chế độ xem tùy chỉnh vào sử dụng SuperView:

self.view.addSubview(myView)

Để xóa Chế độ xem tùy chỉnh khỏi sử dụng Chế độ xem siêu tốc:

self.view.willRemoveSubview(myView)


8
willRemoveSubview không xóa subview khỏi superview. Nó chỉ cho biết khi nào lượt xem phụ sắp bị xóa.
Murat Yasar,

3
Để xóa chế độ xem tùy chỉnh khỏi superview, người ta nên sử dụng myView.removeFromSuperview ()
Yaroslav Bai

1
willRemoveSubview không xóa subview khỏi superview.
Imtee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.