2015-08-26 11 views
10

To jest podobne pytanie do this, ale nie do końca takie samo.IBDesignable nigdy nie kończy aktualizacji UITableViewCell w storyboardie

Utworzono podklasę obiektu UITableViewCell, który odwołuje się do niestandardowej końcówki i oznacza ją jako @IBDezgnable. Zmiany dokonane zarówno w kodzie, jak i w pliku .xib są wyświetlane poprawnie w symulatorze i na urządzeniu, ale nie w scenorysie.

import UIKit 

@IBDesignable class TextFieldTableViewCell: UITableViewCell { 

    var view: UIView! 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 

     setup() 
    } 

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 

     setup() 
    } 

    func setup() { 
     view = loadViewFromNib() 
     view.frame = bounds 
     view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight] 
     contentView.addSubview(view) 
    } 

    func loadViewFromNib() -> UIView { 

     let bundle = NSBundle(forClass: self.dynamicType) 
     let nib = UINib(nibName: "TextFieldTableView", bundle: bundle) 
     let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView 

     return view 
    } 
} 

W serii ujęć wyświetlany jest ciągły komunikat "Aktualizacje graficzne".

Designables Updating

Łamanie problemu w dół do mniej skomplikowanego testu tylko instacji do UITableViewCell i oznaczając go jako @IBDesignable wyniki w tym samym stałe „Designables Aktualizacja”.

import UIKit 

@IBDesignable class TextFieldTableViewCell: UITableViewCell { 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 
    } 

} 

Czy ktoś miał sukces z tworzeniem podklas UIDableViewCell @IBDesignable? Dzieje się tak w Xcode 7 beta 6 i beta 5.

+0

Mam do czynienia z tym samym problemem. Ale kiedy umieściłem tableViewCell w normalnym ViewController, mogę wykonać IBDesignable. Tak więc, uważam, że jest to błąd kodu XCode, którego nie można przypisać do komórki w TableView –

+1

Apple odpowiedział na zgłoszony przeze mnie raport o błędzie i rzeczywiście jest to błąd. – Hama

+0

Dzięki, bardzo pomaga –

Odpowiedz

6

Ten problem został rozwiązany z dniem Xcode 9.

I zgłosił ten problem do Apple i mieć przynajmniej kawałek umysłu wiedząc, że jest to znany błąd. Obecnie jest to otwarty problem pod numerem identyfikacyjnym 17973876.

Edytuj: Według stanu na 12.07.2016 błąd ten jest nadal oznaczony jako otwarty.

+2

Czy masz aktualizację tego raportu o błędzie? – Shad

0

Miałem podobne problemy. Wątek pomogły mi zrozumieć problem: Is there a way for Interface Builder to render IBDesignable views which don't override drawRect:

mam go do pracy poprzez dodanie

override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 
     layoutSubviews() 
    } 

ile mi zrozumieć po przeczytaniu powyższego linku stosu, IBDesignable ładuje stalówkę w serii ujęć, a nie od stalówki lub koder, ale z inicjału z ramką. Nie jestem pewien, ale myślę, że init ze stylem robi coś podobnego.

+0

Dodanie powyższego sugerowanego kodu nie powoduje żadnych różnic. – Hama

+0

czy nadpisujesz metodę layoutSubviews() i dzwonisz super? Miałem jakiś niestandardowy kod rysunkowy, który potrzebowałem i tak zaimplementowałem metodę. Uważam, że Xib jest naprawdę zgrabny, ale może to mieć znaczenie. > override func layoutSubviews() {super.layoutSubviews()} – mxwt

+0

Mam ten sam problem z XCode 7.2, a to nie pomogło. Nie widzę też, jak może pomóc implementacja 'layoutSubviews' i po prostu wywołanie wersji superklasy - gdy wywoływana jest' layoutSubviews', to automatycznie wywoła ona wersję nadklasy, jeśli nie zostanie ona nadpisana. – Alnitak

0

Wygląda na to, że błąd "Aktualizowanie" ma miejsce tylko wtedy, gdy komórka znajduje się w serii ujęć. Wszystko działa poprawnie, gdy utworzysz specjalny plik .xib tylko dla komórki.

Mamy nadzieję, że wkrótce to naprawią.

Powiązane problemy