2015-04-07 2 views
0

Позвольте мне описать мою проблему.Не удалось найти участника 'CellForItemAtIndexPath'

Я написал класс, названный CardCell, который унаследовал от UICollectionViewCell. В моем другом классе, MainViewController, подкласс UICollectionView. Экземпляр NSMutableArray, items, был создан для хранения данных каждой отдельной ячейки.

элементы вар = NSMutableArray()

self.items = NSMutableArray (вместимость: 20) для г в 0 ... 20 { items.addObject ("Пункт (я)") }

Перемещение items в индекс Index Collection CollectionView и готовый к вызову.

func collectionView(collectionView: UICollectionView!, moveItemAtIndexPath fromIndexPath: NSIndexPath!, toIndexPath: NSIndexPath!) { 
    var thing: NSString = items[fromIndexPath.item] as NSString 
    self.items.removeObjectAtIndex(fromIndexPath.item) 
    self.items.insertObject(thing, atIndex: toIndexPath.item) 
} 

Наконец, я пытаюсь создать экземпляр CardCell с items.

var cell: CardCell = CardCell(self.collectionView?.cellForItemAtIndexPath(self.collectionView?.indexPathsForSelectedItems().first)) 

Далее, произошла ошибка с "Не удалось найти участника '' CellForItemAtIndexPath". Одна вещь, которую я должен сказать, - это тот код, который был переведен из версии Objective-C.

Объективный-C Версия:

PassCell *cell = (PassCell *)[self.collectionView cellForItemAtIndexPath:[[self.collectionView indexPathsForSelectedItems] firstObject]]; 

Пожалуйста, помогите мне решить эту проблему.

Отличная оценка для вашего гида и время.

Этан Джо

+0

Вы упомянули 'UICollectionViewDelegateFlowLayout' в делегатах – Shruti

+0

@Shruti, вы имеете в виду' UICollectionViewDelegate'? Где нужна 'UICollectionViewDelegateFlowLayout' ?? – itsji10dra

+0

У меня была аналогичная проблема. Я добавил этого делегата, и он был разрешен. Так что попробуй. – Shruti

ответ

1

Может что-то пошло не так с переводом с Objective-C. Я не думаю, что вы можете использовать метод экземпляра UICollectionView для инициализации своей пользовательской ячейки.

В коде Objective-C вы приводите результат к пользовательскому типу ячеек. Я верю в Swift, вы должны сделать то же самое (обратите внимание, что я разделил заявление на две части, чтобы улучшить читаемость):

let indexPath = self.collectionView?.indexPathsForSelectedItems().first as IndexPath 
var cell = self.collectionView?.cellForItemAtIndexPath(indexPath) as CardCell 

Примечание: в зависимости от ваших определений может потребоваться as? или as! для оператора литым.

+0

Спасибо за ваш ответ. Во второй строке вашего ответа возникает другая ошибка. Complier сказал, что '?' который находится за «self.collectionView», нужно удалить из-за 'type is (UICollectionView, didSelectItemAtIndexPath: NSIndexPath) ->()' –

+0

После того, как я исправил его как 'var cell = self.collectionView? .cellForItemAtIndexPath (indexPath as NSIndexPath) ', он был построен и успешно работал. –

+0

Я добавил актерский состав для 'indexPath' в первый оператор. Спасибо, что указали на эту деталь. – Mundi

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