2014-09-11 3 views
2

Я только что загрузил новый Xcode GM и, получив массу ошибок, получил мой быстрый проект, чтобы работать отлично (yay!). Однако сегодня я попытался установить приложение на устройство iOS 8, и теперь все мои таблицы и коллекции видят приложение. Беда приходит из чего-то вроде этого:ViewWithTag больше не работает с iOS 8? с быстрым

let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionCellCB", forIndexPath: indexPath) as UICollectionViewCell 

var pic = cell.contentView.viewWithTag(10) as UIImageView 
pic.image = DisplayImage; 

Я дважды проверил мои раскадровки удостоверяется у меня есть ячейки с этим повторного использования идентификатора и зрения UIImage с этим тегом, но это не будет работать, как здесь, так и на других сценах. он отлично работает на моем устройстве iOS 7, но каждый раз ломается на iOS 8. Я надеюсь, что это ошибка, но я не могу быть уверен. Кто-нибудь еще получает эту проблему или знает, как ее исправить?

Основная проблема заключается в том, что когда я вызываю viewWithTag, функция возвращает nil вместо ссылки на представление, подобное тому, что было в iOS 7 и предыдущем.

+2

Определить «перерывы каждый раз» Где это «ломается»? Отсутствует много актуальной и необходимой информации. –

+0

он «ломается», когда табличное представление или представление коллекции загружается/перезагружается. Как и в func collectionView (collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { – Grindz

ответ

1

У меня такая же проблема. В некоторых ячейках нет содержимого iOS8. Подразделы не возвращаются viewWithTag.

Похоже, что ячейка не создается должным образом, а подпрограммы не существуют. Ниже приводится содержание двух клеток с различными идентификаторами - первый сломан, второй работает:

(lldb) po [cell recursiveDescription] 
<tSettingsViewCell: 0x7a5d7950; baseClass = UITableViewCell; frame = (0 0; 695 44); text = 'WiFi'; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7a5d7af0>> 
    | <_UITableViewCellSeparatorView: 0x7a5d77f0; frame = (15 43; 680 1); layer = <CALayer: 0x7a5d8500>> 

(lldb) po [cell recursiveDescription] 
<tSettingsViewCell: 0x7a430210; baseClass = UITableViewCell; frame = (0 0; 695 44); text = 'Server'; opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7a4301e0>> 
    | <UITableViewCellContentView: 0x7a430170; frame = (0 0; 669 44); clipsToBounds = YES; opaque = NO; gestureRecognizers = <NSArray: 0x7a429850>; layer = <CALayer: 0x7a430140>> 
    | | <UITableViewLabel: 0x7a430080; frame = (15 0; 645 44); text = 'Server'; clipsToBounds = YES; opaque = NO; layer = <_UILabelLayer: 0x7a430030>> 
    | | <UITextField: 0x7a42f980; frame = (495 8; 185 30); text = ''; clipsToBounds = YES; opaque = NO; autoresize = RM+BM; tag = 200; layer = <CALayer: 0x7a42fce0>> 
    | <_UITableViewCellSeparatorView: 0x7a42ad10; frame = (15 43; 680 1); layer = <CALayer: 0x7a42aad0>> 
    | <UIButton: 0x7a42a870; frame = (677 16; 8 13); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7a42a840>> 
    | | <UIImageView: 0x7a4295a0; frame = (0 0; 8 13); clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x7a429660>> 

Раскадровка не использует функцию автоматической компоновки.

Я не понял, почему это происходит.

EDIT:

Оказывается, обычай клетки отфильтровывая вид сверху сепаратора (не добавляя его к подвидам), и это, казалось, ломать вещи. Когда все subviews были переданы супер в представлении addSubview: (UIView *), он снова начал работать. Все еще очень загадочно ...

+0

Да, единственный способ, которым я добрался до него, - это делая ячейки подклассом табличных/коллекционных элементов зрения и назначая iboutlets через построитель интерфейсов. это работа вокруг, которая не требует, чтобы я перепроектировал фактические ячейки в IB, но я избегал этого, поскольку у меня есть 5-6 таблиц, на которые я должен был это сделать, и я подумал, может быть, ошибочно, что viewwithtag был более предпочтительный метод. – Grindz