2014-10-06 10 views
10

का उपयोग कर सीमा रंग सेट करें यदि संभव हो तो मैं स्टोरीबोर्ड का उपयोग करके सीमा रंग सेट करना चाहता हूं। मैं इस सवाल का जवाब यहाँ देखा है: UITextField border colorUITextField स्टोरीबोर्ड

और मैं स्टोरीबोर्ड में जवाब देने के बाद: enter image description here

सभी गुण सेट है, लेकिन TextField सीमा नहीं दिखाता है। कोई सुझाव?

+0

आप देख सकते हैं [कैसे करें स्टोरीबोर्ड में सीमा जोड़ें] (http://stackoverflow.com/questions/12301256/is-it-possible-to-set-uiview-border-properties-from-interface-builder/ 30348021 # 30348021) – iHulk

उत्तर

2

मुझे यकीन नहीं है कि आप स्टोरीबोर्ड में यूआईटीएक्स्टफील्ड के सीमा रंग को बदल सकते हैं। आप इसे प्रोग्राम के साथ प्रोग्राम के साथ बदल सकते हैं;

UITextField *myTextField = (UITextField *)[self.view viewWithTag:1]; 
myTextField.borderStyle = UITextBorderStyleLine; 
myTextField.layer.borderWidth = 2; 
myTextField.layer.borderColor = [[UIColor redColor] CGColor]; 

उम्मीद है कि इससे मदद मिलती है।

+0

@katit - क्या यह किसी भी मदद का था, या आपको स्टोरीबोर्ड में ऐसा करने का कोई तरीका मिला है? – Gismay

0

layer.borderColor संपत्ति के कारण यह कोई सीमा नहीं दिखाता है। यह प्रकार का CGColor और रनटाइम विशेषताएँ अभी तक डिफ़ॉल्ट रूप से इसका समर्थन नहीं करती है, इसलिए, केवल एक विशेषता गलत सेट करना, अन्य को भी अक्षम करता है।

स्टोरीबोर्ड से यह ऐसा करने के लिए, लेकिन यह भी कुछ कोड और उपवर्गीकरण से जुड़े हैं, तो आप इस विधि का उपयोग कर सकते हैं:

उपवर्ग UITextField और एक IB_DESIGNABLE UIColor संपत्ति बनाने के लिए, कि आप तो CGColor में बदलना होगा और यह लागू self.layer.borderColor पर।

7

जैसा कि बोगदान ने बताया कि यह सच है कि आप streboard में परत.बॉर्डर गुण संपत्ति नहीं ढूंढ सकते क्योंकि यह एक रन टाइम चीज है।

हालांकि अभी भी आप सीमा रंग को किसी भी दृश्य (या UIView Subclass) पर कोडिंग के साथ किसी भी दृश्य (या UIView Subclass) के बिना सेट कर सकते हैं।

नीचे दिए गए चरणों कि यह कैसे प्राप्त करने के लिए कर रहे हैं,

  1. CALayer वर्ग पर एक वर्ग बनाएँ। उपयुक्त नाम के साथ UIColor की एक संपत्ति घोषित करें, मैं इसे सीमाUIColor के रूप में नामित करूंगा।
  2. इस संपत्ति के लिए सेटटर और गेटर लिखें।
  3. 'सेटर' विधि में बस परत के "सीमा रंग" गुण को नए रंगों CGColor मान पर सेट करें।
  4. 'गेटटर' विधि में परत की सीमा के साथ UIColor वापस लौटें।

पीएस: याद रखें, श्रेणियां संग्रहीत गुण नहीं हो सकती हैं। 'सीमाUIColor' का उपयोग एक गणना की गई संपत्ति के रूप में किया जाता है, जैसा कि हम जिस पर ध्यान केंद्रित कर रहे हैं उसे प्राप्त करने के संदर्भ के रूप में।

कृपया नीचे दिए गए कोड नमूने पर एक नज़र डालें;

उद्देश्य सी:

इंटरफ़ेस फ़ाइल:

#import <QuartzCore/QuartzCore.h> 
#import <UIKit/UIKit.h> 

@interface CALayer (BorderProperties) 

// This assigns a CGColor to borderColor. 
@property (nonatomic, assign) UIColor* borderUIColor; 

@end 

कार्यान्वयन फ़ाइल:

#import "CALayer+BorderProperties.h" 

@implementation CALayer (BorderProperties) 

- (void)setBorderUIColor:(UIColor *)color { 
    self.borderColor = color.CGColor; 
} 

- (UIColor *)borderUIColor { 
    return [UIColor colorWithCGColor:self.borderColor]; 
} 

@end 

स्विफ्ट 3.1:

extension CALayer { 
    var borderUIColor: UIColor { 
     set { 
      self.borderColor = newValue.cgColor 
     } 

     get { 
      return UIColor(cgColor: self.borderColor!) 
     } 
    } 
} 

और अंततः अपने स्टोरीबोर्ड/एक्सआईबी पर जाएं, शेष चरणों का पालन करें;

  1. उस ऑब्जेक्ट पर क्लिक करें जिसके लिए आप सीमा रंग सेट करना चाहते हैं।
  2. "उपयोगिता" (स्क्रीन के दाहिने तरफ) पैनल में "पहचान निरीक्षक" (बाईं ओर से 3) पर क्लिक करें।
  3. "उपयोगकर्ता परिभाषित रनटाइम विशेषताएँ" के तहत, एक कुंजी पथ जोड़ने के लिए "+" बटन पर क्लिक करें।
  4. "रंग" के मुख्य पथ के प्रकार को सेट करें।
  5. कुंजी पथ के लिए "layer.borderUicolor" के रूप में मान दर्ज करें। [याद रखें यह परिवर्तनीय नाम आपको श्रेणी में घोषित किया गया है, सीमा रंग यहां यह सीमाUIColor] होना चाहिए।
  6. अंत में आप जो भी रंग चाहते हैं उसे चुना।

संपादित करें: आप सीमा रंग को देखने के लिए कम से कम 1 करने के लिए layer.borderWidth संपत्ति के मूल्य निर्धारित करने के लिए किया है।

बिल्ड और रन करें। हैप्पी कोडिंग। :)

+0

** स्विफ्ट 3 ** के लिए ** ** स्विफ्ट 2 ** संस्करण में आपको 'CGColor' के साथ' CGColor' के सभी उदाहरणों को प्रतिस्थापित करने की आवश्यकता है। – CAD97

0

यह @rameswar जवाब जो मुझे लगता है कि यह सही है पर एक संस्करण है। जब से हम एक UIColor लागू कर रहे हैं, मुझे लगता है कि यह बजाय UITextField के लिए एक एक्सटेंशन (UI चीजों को एक साथ) लिखने के लिए प्राथमिकता दी जाती है:

extension UITextField { 

    var borderColor : UIColor? { 
    get { 
     if let cgcolor = layer.borderColor { 
     return UIColor(CGColor: cgcolor) 
     } else { 
     return nil 
     } 
    } 
    set { 
     layer.borderColor = newValue?.CGColor 

     // width must be at least 1.0 
     if layer.borderWidth < 1.0 { 
     layer.borderWidth = 1.0 
     } 
    } 
    } 
} 

क्रम संपत्ति तो होगा borderColor (ताकि आप टाइप करने के लिए layer. की जरूरत नहीं है और मुझे लगता है कि यह borderUIColor से थोड़ा क्लीनर है)।

CALayer की borderColor वैकल्पिक है तो यह इस संपत्ति है। nil

और आखिरकार, layer.borderWidth पर सेट किया गया यह न्यूनतम 1.0 पर सेट है क्योंकि यह रंग अन्यथा सेट नहीं है।

3

खैर के रूप में Bogdan ने कहा, आप बहुत अच्छी तरह से है कि सरल उपवर्गीकरण और सिर्फ कोड की कुछ बिट्स के साथ कर सकता है। कि सब कुछ करने के बाद स्टोरीबोर्ड उन में संपादित किया जा सकेगा।

  1. उपवर्ग UITextField
  2. दो गुण, बॉर्डर चौड़ाई के लिए एक और सीमा रंग के लिए एक बनाएं
  3. वे चर IBInspectable और पूरी क्लास IBDesignable
  4. आप बॉर्डर का रंग और चौड़ाई बदलने के लिए कर सकें और वास्तविक समय में परिवर्तन देखें। उदाहरण के लिए

संहिता (स्विफ्ट 3.1):

@IBDesignable 
class FormTextField: UITextField { 

    @IBInspectable var borderColor: UIColor? { 
     didSet { 
      layer.borderColor = borderColor?.cgColor 
     } 
    } 

    @IBInspectable var borderWidth: CGFloat = 0 { 
     didSet { 
      layer.borderWidth = borderWidth 
     } 
    } 
} 

संपादित करें: आप अपने में यह देखेंगे गुण निरीक्षक

Attributes Inspector