2015-10-22 8 views
0

Я создаю несколько объектов под тем же именем и добавляю их в Subview (переменные находятся на немецком языке).Swift: Удалить все из Subview

wandX = (screenBreite - ((felderAnzX - 0) * feldBreite)) 
    wandY = (screenHoehe - ((felderAnzY - 5) * feldBreite)) 

    for(var i = 0; i < 6; i++){ 
     wand1 = UIImageView(frame: CGRectMake(wandX, wandY, feldBreite, feldBreite)) 
     wand1.image = wand 
     self.addSubview(wand1) 
     wandXarray.insert(wandX, atIndex: i) 
     wandYarray.insert(wandY, atIndex: i) 
     wandX = wandX + feldBreite 
    } 

(Создание ряда стен)

Но если я хочу, чтобы удалить их с wand1.removeFromSuperview() она только удаляет последний объект добавил он. Возможное решение, которое я нашел, - это поставить еще один объект сверху и удалить все ссылки. С большим количеством объектов и многих этапов проблема заключается в использовании ЦП.

Edit: Использование метода self.view.subviews.removeAll() получает мне следующую ошибку:

Cannot use mutating member on immutable value: 'subviews' is a get-only property

+0

'self.add.Subview (wand1) '. Как эта строка может работать? – t4nhpt

+0

Спасибо. Я совершил ошибку при копировании кода. –

ответ

2

wand1 = UIImageView (... переписывает вашу ссылку снова и снова, так что вы никогда не будете в состоянии удалить все, кроме последнего . пункт создан из надтаблицы вы либо придется использовать массив или словарь:

class Class 
{ 
    var array = [UIImageView](); 
    ... 
    func something() 
    { 
    ... 
    for(var i = 0; i < 6; i++){ 
    let wand1 = UIImageView(); 
    wand1.image = wand 
    array.append(UIImageView(frame: CGRectMake(wandX, wandY, feldBreite, feldBreite))) 
    self.add.Subview(wand1)//Dunno how this works but it is your code 
    wandXarray.insert(wandX, atIndex: i) 
    wandYarray.insert(wandY, atIndex: i) 
    wandX = wandX + feldBreite 
    } 
    ... 
    func removeThisImage(index : Int) 
    { 
     array[index].removeFromSuperView(); 
    } 

или вы можете создавать ссылки на объекты для каждого изображения, которое вы создаете, каждый с уникальным именем

// NO LONGER ALLOWED Если вы просто хотите удалить все представления в представлении и не беспокоиться об устранении специфических особенностей, просто вызовите self.subviews.removeAll(), где self - это представление, которое содержит ваши просмотры. //

Похоже, вам придется написать свой собственный метод расширения, чтобы справиться с этим:

extension UIView 
{ 
    func clearSubviews() 
    { 
     for subview in self.subviews as! [UIView] { 
      subview.removeFromSuperview(); 
     } 
    } 
} 

Затем, чтобы использовать его, это просто self.view.clearSubviews();

+0

Оба являются хорошими советами. Для моей проблемы второй вариант self.subviews.removeAll() 'идеально подходит. У меня проблема, но если я использую ее. «Значение типа« ViewController »не имеет подчиненных элементов« »- это сообщение об ошибке. –

+0

, если вы находитесь внутри контроллера представления, то это self.view.subviews – Knight0fDragon

+0

Чем я получил другую ошибку, все еще в той же строке. «Нельзя использовать мутирующий элемент по неизменяемой ценности:« subview »- свойство get-only» –