मेरे पास कोड का निम्नलिखित सेट है:
CustomView.h
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface CustomView : UIView
@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;
@end
CustomView.m
#import "CustomView.h"
@implementation CustomView
- (void)setBorderColor:(UIColor *)borderColor {
_borderColor = borderColor;
self.layer.borderColor = borderColor.CGColor;
}
- (void)setBorderWidth:(CGFloat)borderWidth {
_borderWidth = borderWidth;
self.layer.borderWidth = borderWidth;
}
- (void)setCornerRadius:(CGFloat)cornerRadius {
_cornerRadius = cornerRadius;
self.layer.cornerRadius = cornerRadius;
}
@end
(स्विफ्ट संदर्भ के लिए, स्विफ्ट कोड के साथ भी यह समस्या थी)
CustomView.swift
@IBDesignable
class CustomView : UIView {
override init(frame: CGRect) {
super.init(frame: frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
@IBInspectable var borderColor : UIColor = UIColor.clearColor() {
didSet {
self.layer.borderColor = borderColor.CGColor
}
}
@IBInspectable var borderWidth : CGFloat = 0.0 {
didSet {
self.layer.borderWidth = borderWidth
}
}
@IBInspectable var cornerRadius : CGFloat = 0.0 {
didSet {
self.layer.cornerRadius = cornerRadius
}
}
}
मैंने UIView
स्टोरीबोर्ड पर एक व्यू कंट्रोलर जोड़ा और इसके उपवर्ग को सेट किया CustomView
।
यह "Designables" पंक्ति को जोड़ता है। यह "अपडेटिंग" पर अटका हुआ है और टूलटिप कहता है "वेटिंग फॉर टारगेट टू बिल्ड"। यह इस स्थिति से कभी नहीं बदलता है।
जब मैं विशेषताओं का निरीक्षण करता हूं, तो मैं इन IBInspectable
गुणों को सेट करने में सक्षम हूं :
और एक बार सेट हो जाने पर, वे "उपयोगकर्ता परिभाषित रनटाइम एट्रिब्यूट्स" में भी दिखाई देते हैं:
हालाँकि, "Designables" की स्थिति कभी भी एक ही टूलटिप के साथ "अपडेट" से आगे नहीं बढ़ती है (मैंने कई बार Cmd + B बनाने की कोशिश की है, कुछ भी नहीं बदलता है)।
इसके अलावा, जैसा कि मैंने IBInspectable
गुण निर्धारित किए हैं, मुझे हर एक के लिए एक चेतावनी मिलती है:
IBDesignables - "UIView" के उदाहरण के लिए मुख्य पथ " बॉर्डर - बॉर्डर " के लिए उपयोगकर्ता परिभाषित रनटाइम विशेषता की अनदेखी करना ... यह बॉर्डर कुंजी - बॉर्डर के लिए कुंजी-मान कोडिंग-अनुरूप नहीं है।
उत्पन्न चेतावनियों का स्क्रीनशॉट:
मैं कुंजी-मूल्य कोडिंग-अनुरूप मुद्दों से परिचित हूं और आमतौर पर उन्हें हल करने का तरीका जानता हूं ... लेकिन मुझे समझ नहीं आता कि यहां इस मुद्दे को कैसे हल किया जाए। दृश्य के पहचान निरीक्षक के अनुसार, दृश्य एक "CustomView" (एक नियमित "UIView" नहीं है, जिसमें कोई गुण नहीं है)। और अगर दृश्य "CustomView" नहीं थे, तो ये डिज़ाइन किए गए गुण Attributes Inspector में दिखाई नहीं देंगे, है ना? लेकिन जब इंटरफ़ेस बिल्डर इन विशेषताओं को दृश्य पर लागू करने का प्रयास करता है, तो यह सोचकर वापस जाता है कि दृश्य का वर्ग "UIView" है और विशेषताओं को लागू नहीं कर सकता।
कोई मदद? कृपया मुझे बताएं कि क्या मैंने कुछ महत्वपूर्ण विवरण छोड़ दिया है, लेकिन इसके लायक क्या है, मैंने इस ट्यूटोरियल का ठीक-ठीक पालन किया है (ओबजैक बनाम स्विफ्ट के अलावा)। यह भी ध्यान देने योग्य है कि मैंने इस ट्यूटोरियल का अनुसरण दूसरी मशीन पर किया है और यह एक आकर्षण की तरह काम करता है (मेरा इरादा कल रात इस पोस्ट को बनाने का था लेकिन मैं जिस कंप्यूटर पर था तब यह समस्या नहीं थी)।
टिप्पणियों के आधार पर, यह सुझाव दिया गया है कि शायद .m
फ़ाइल शामिल नहीं है और यह समस्या का कारण हो सकता है। मुझे लगा कि निश्चित रूप से मैं इस परिदृश्य के लिए अपने रास्ते से हट जाऊंगा, लेकिन मैंने फिर भी जाँच की।
जब मैंने पहली बार ऐसा करने का प्रयास करना शुरू किया, तो मैं इस समझ में था कि IB_DESIGNABLE
कक्षाओं को एक अलग UIKit
ढांचे का हिस्सा होना चाहिए । तो इस पहले स्क्रीनशॉट से, आप देख सकते हैं कि मैंने एक "CustomViews" फ्रेमवर्क स्थापित किया है, जिसमें एक वर्ग है CustomView
,। आप यह भी देखेंगे कि मैंने भी एक बनाया है OtherView
, जो इसके समान है CustomView
, सिवाय इसके कि यह एक अलग ढांचे में नहीं है। समान समस्या हालांकि दोनों वर्गों के बीच स्टोरीबोर्ड पर बनी रहती है।
यहां हमारे पास एक स्क्रीनशॉट है जो दर्शाता है कि फ्रेमवर्क के CustomView.m
साथ बनाया जाना शामिल है CustomViews
:
इस बीच, निम्न स्क्रीनशॉट कई चीजों को इंगित करता है:
CustomViews.framework
मुख्य परियोजना में उचित रूप से शामिल है।OtherView.m
एक संकलित स्रोत के रूप में भी शामिल है, इसलिए भले ही कुछ गलत होCustomView
,OtherView
काम करना चाहिए, हालांकि यह समान त्रुटियों को उत्पन्न करता है।Main.storyboard
औरLaunchScreen.xib
लाल के रूप में दिखाई दे रहे हैं। मुझे पता नहीं क्यों, और क्योंLaunchScreen.xib
मैं (मैं इस फ़ाइल को नहीं छुआ है) के रूप में मामूली सुराग नहीं है, हालांकि मैं अन्य परियोजनाओं को देखने के बाद कह सकते हैं,Main.storyboard
उन परियोजनाओं के लिए लाल रंग में भी दिखाता है, और मैं कर रहा हूँ साथIB_DESIGNABLE
याIBInspectable
वहाँ कुछ भी नहीं कर रहा है ।
मैंने कई बार यह कोशिश की है और इसे फिर से लिया है। यह घर पर मेरे कंप्यूटर पर हर बार काम करता है - मैं घर पर इस प्रश्न में वर्णित समस्या को पुन: पेश नहीं कर सकता। काम पर, यह कभी काम नहीं करता है। इस प्रश्न में वर्णित समस्या हर बार होती है।
दोनों कंप्यूटर मैक मिनिस हैं जो इस साल नए खरीदे गए हैं (नए मॉडल नहीं, 2012 के अंत में मॉडल)। दोनों कंप्यूटर OS X Yosemite 10.10 पर चल रहे हैं। दोनों कंप्यूटर Xcode संस्करण 6.1 चला रहे हैं। घर पर, बिल्ड (6A1052d) है। आज सुबह, मैं पुष्टि कर सकता हूं कि दोनों कंप्यूटर एक्सकोड के समान निर्माण चला रहे हैं।
दूसरों ने मुझे सुझाव दिया है कि यह खराब रैम हो सकता है। ऐसा लगता है कि मुझे बहुत दूर जाना है। मैंने कई बार प्रोजेक्ट को पुनरारंभ किया है, कंप्यूटर को कई बार पुनरारंभ किया है। मुझे लगता है अगर लगभग 6 महीने पुराने कंप्यूटर पर खराब रैम थे, तो मैं अन्य समस्याओं को देख रहा हूं, और यह समस्या कम सुसंगत होगी। लेकिन यह सटीक समस्या कई बार पूरी परियोजना को फिर से शुरू करने और कंप्यूटर पर पूर्ण पुनरारंभ करने के बावजूद बनी रहती है।
यह ध्यान देने योग्य होना चाहिए कि अगर मैं वास्तव में इस परियोजना को संकलित करता हूं और चलाता हूं, तो IBInspectable
गुणों के साथ कस्टम दृश्य वास्तव में प्रदर्शित होता है जैसा कि मुझे उम्मीद है कि स्टोरीबोर्ड इसे प्रदर्शित करेगा। मुझे लगता है कि हालांकि, यह IB_DESIGNABLE
और IBInspectable
निर्देश के साथ भी यही होगा , क्योंकि ये उपयोगकर्ता परिभाषित रनटाइम एट्रीब्यूट के रूप में बनाए गए हैं।