2015-06-06 2 views
0

У меня есть UICollectionView, в котором пользователь может выбирать данные из ячеек для добавления в массив. Я пытаюсь выделить выделенные ячейки при нажатии, а затем отключить их при повторном нажатии. В том же фрагменте кода, который выделяется и не подчеркивается, я хотел бы добавить/удалить данные из массива. У меня нет проблем с добавлением данных в массив, но я не могу понять, как удалить его, когда он не подсвечен.Как удалить объект из массива с помощью исходного пути индекса?

код здесь:

var removeFromList = [AnyObject]() 
func collectionView(collectionView: UICollectionView, shouldSelectItemAtIndexPath indexPath: NSIndexPath) -> Bool { 

    var cell = self.collectionView2.cellForItemAtIndexPath(indexPath) 

    if cell!.tag == 0 { 
     cell!.layer.borderWidth = 2.0 
     cell!.layer.borderColor = UIColor.blueColor().CGColor 
     removeFromList.append(objectIds[indexPath.row]) 
     cell!.tag = 1 
    } else { 
     cell!.layer.borderWidth = 0.0 
     cell!.tag = 0 
     removeFromList.//WHAT CAN I PUT HERE? 
    } 
    return true 
} 

ответ

2

Используйте removeAtIndex(index: Int) метод для удаления элемента

var removeFromList = [NSString]() 

if let index = find(removeFromList, objectIds[indexPath.row] as! NSString) { 
    removeFromList.removeAtIndex(index) 
} 
0

Поскольку массив используется как список, вам нужно найти индекс, прежде чем можно удалить элемент , find метод Используйте Свифта:

removeFromList.removeAtIndex(find(removeFromList, objectIds[indexPath.row])!) 

Проблема этого метода состоит в том, что find не работает с AnyObject. Зацикливание по массиву и сравнение каждого термина также не будут работать, поскольку AnyObject не сопоставим. Вам нужно изменить removeFromList и objectIds на более конкретный класс.

Чтобы сделать этот код более «красивым» и предотвратить повреждение приложения, когда он пытается удалить что-то не в массиве, вы должны использовать расширение класса массива. К сожалению, вам нужно будет создать новую функцию для каждого типа данных.

func removeObjMyClass(inout arr: [MyClass], obj: MyClass) { 
    if let index = find(arr, obj) { 
     arr.removeAtIndex(index) 
    } 
} 

removeObjMyClass(&removeFromList, objectIds[indexPath.row]) 
+0

проверки индекса LET с помощью «если» будет проще :) –

0

Используйте словарь для этого:

var removeFromList = [NSIndexPath:AnyObject]()

if cell!.tag == 0 { 
    cell!.layer.borderWidth = 2.0 
    cell!.layer.borderColor = UIColor.blueColor().CGColor 
    removeFromList[indexPath] = objectIds[indexPath.row] 
    cell!.tag = 1 
} else { 
    cell!.layer.borderWidth = 0.0 
    cell!.tag = 0 
    removeFromList.removeValueForKey(indexPath) 
} 
+0

Изменение типа влияет на остальную часть моего кода, так что я Я боюсь, что не могу этого сделать! – bkwebhero

Смежные вопросы