2015-08-26 8 views
10

में UITableViewCell को अपडेट करने को समाप्त नहीं करता है यह this पर एक समान प्रश्न है लेकिन काफी समान नहीं है।आईबी डिज़ाइन करने योग्य कभी स्टोरीबोर्ड

मैंने UITableViewCell का उप-वर्ग बनाया है जो एक कस्टम निब का संदर्भ देता है और इसे @IBDesignable के रूप में चिह्नित करता है। कोड और .xib फ़ाइल दोनों में किए गए परिवर्तन सिम्युलेटर और डिवाइस पर सही ढंग से प्रदर्शित होते हैं लेकिन स्टोरीबोर्ड में नहीं।

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 
    } 
} 

स्टोरीबोर्ड स्थायी "डिज़ाइनबेल अपडेटिंग" प्रदर्शित करता है।

Designables Updating

समस्या केवल एक UITableViewCell उपवर्गीकरण और यह अंकन ही स्थायी "Designables अद्यतन कर रहा है" के रूप में @IBDesignable परिणामों के एक कम जटिल परीक्षण में विश्लेषण करना।

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) 
    } 

} 

क्या किसी को @IBDesignable UITableViewCell सबक्लास बनाने में सफलता मिली है? यह एक्सकोड 7 बीटा 6 और बीटा 5 में हो रहा है।

+0

मुझे एक ही समस्या का सामना करना पड़ रहा है। लेकिन जब मैं एक सामान्य ViewController में tableViewCell डालता हूं, तो मैं आईबी डिज़ाइन करने योग्य कर सकता हूं। इसलिए, मेरा मानना ​​है कि यह एक एक्सकोड बग है कि सेल को TableView –

+1

में डिज़ाइन करने योग्य नहीं बनाया जा सकता है। ऐप्पल ने सबमिट की गई एक बग रिपोर्ट का जवाब दिया है और यह वास्तव में एक बग है। – Hama

+0

धन्यवाद, बहुत मदद करता है –

उत्तर

6

यह समस्या Xcode 9. की

मैं एप्पल के लिए इस मुद्दे को सूचना दी थी और कम से कम जानते हुए भी कि यह एक ज्ञात बग है मन की टुकड़ा के रूप में हल किया गया है। वर्तमान में यह समस्या आईडी 17973876 के तहत एक खुला मुद्दा है।

संपादित करें: 12/7/2016 तक यह बग अभी भी खुले के रूप में चिह्नित है।

+2

क्या आपके पास उस बग रिपोर्ट पर कोई अपडेट है? – Shad

0

मुझे इसी तरह की समस्याएं थीं। यह धागा मेरे मुद्दे को समझने में मदद मिली: Is there a way for Interface Builder to render IBDesignable views which don't override drawRect:

मैं बहुत ऊपर ढेर लिंक को पढ़ने के बाद के रूप में मैं समझता हूँ

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

जोड़कर काम करने के लिए मिल गया, IBDesignable निब से या से नहीं स्टोरीबोर्ड में निब लोड करता है कोडर लेकिन फ्रेम के साथ init। बहुत यकीन नहीं है, लेकिन मुझे लगता है कि शैली के साथ init एक ही बात कर रहा है।

+0

उपरोक्त सुझाए गए कोड को जोड़ना कोई फर्क नहीं पड़ता है। – Hama

+0

क्या आप layoutSubviews() विधि को ओवरराइड कर रहे हैं और सुपर कॉल कर रहे हैं? मेरे पास कुछ कस्टम ड्राइंग कोड था जो मुझे चाहिए और इस विधि को कार्यान्वित किया गया। मैं xib वास्तव में काम करने के लिए fiddly पाते हैं, लेकिन इससे अंतर हो सकता है। > func लेआउट ओवरराइडस्यूव्यूव्यू() {super.layoutSubviews()} – mxwt

+0

मुझे एक्सकोड 7.2 के साथ एक ही समस्या है, और इससे मदद नहीं मिली। मैं यह भी नहीं देखता कि 'लेआउटस्यूब्यूव्यू' को कैसे कार्यान्वित किया जा रहा है और केवल सुपरक्लास संस्करण को कॉल करने में मदद मिल सकती है - जब 'layoutSubviews' कहा जाता है तो यह ओवरराइड होने पर स्वचालित रूप से सुपरक्लास संस्करण को आवेदक करेगा। – Alnitak

0

ऐसा लगता है कि "अपडेटिंग" बग तभी हो रहा है जब सेल स्टोरीबोर्ड के अंदर हो। जब आप सेल के लिए विशेष .xib फ़ाइल बनाते हैं तो सबकुछ ठीक काम करता है।

उम्मीद है कि वे जल्द ही इसे ठीक कर देंगे।

संबंधित मुद्दे