Свіфт додає перегляд і видаляє його


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 - це подання з тегом 100, а не self.view, тому ваш оператор if ніколи не виконується.
rdelmar

Дякую за відповідь. Це редагується зараз
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!")
    }
}

Оновлення:

Свіфт 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")
    }
}

Дякую! насправді це вирішило мою проблему. Але взаємодія з де супер видом це не відключає. Як я можу відключити взаємодію з супер видом?
Дасога

Я не зрозумів. Яка взаємодія з суперсвітом?
rakeshbs

У мене є жест натискання в першому поданні, після того, як за допомогою кнопки я додаю підпрогляд, але це лише інформаційний перегляд, тому за допомогою натискання я хочу його видалити. Зараз він працює на знімальному крані. Але в першому поданні я отримую той самий кран, мені потрібно відключити цей кран ... дякую !!
Дасога

Куди потрібно натиснути, щоб видалити перегляд інформації? Ви хочете видалити вигляд, коли інформаційний перегляд натискається всередині, а не зовні?
rakeshbs

Так, коли користувач натискає на інформаційний перегляд (другий вигляд), я хочу видалити цей вигляд (другий вигляд) і показати перший вигляд знову.
Дасога

2

Якщо припустити, що ви маєте до нього доступ через торгові точки або програмний код, ви можете видалити його, посилаючись на свій вигляд fooта removeFromSuperviewметод

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 не видаляє підпрогляд із суперперегляду. Він повідомляє лише про те, коли підвигляд збирається видалити.
Мурат Ясар

3
Щоб видалити власний вигляд із суперперегляду, слід скористатися myView.removeFromSuperview ()
Ярослав Бай,

1
willRemoveSubview не видаляє підпрогляд із суперперегляду.
Imtee
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.