मैं कई स्टोरीबोर्ड से अपने सभी व्यू कंट्रोलर पर कुछ स्टाइल लागू करना चाहता हूं। मेरे पास कई व्यू कंट्रोलर हैं इसलिए स्टाइल को हर व्यू कंट्रोलर पर लागू करना मूर्खतापूर्ण लगता है। मैं इसे जितना संभव हो सके सबसे अधिक कोड दुबला तरीके से करना चाहता हूं। मैं इसे ऐपडिलेगेट फ़ाइल में करने के बारे में सोच रहा था क्योंकि आप वहां अपना नेविगेशन कंट्रोलर स्टाइल भी बदल सकते हैं, लेकिन अभी तक कोई सफलता नहीं मिली है। जरा सा भी नहीं।

तो क्या कोई जानता है कि मैं यह कैसे कर सकता हूं?

मैं ऐप के लिए स्विफ्ट का उपयोग कर रहा हूं।

निम्नलिखित स्टाइल सिद्धांतों को लागू किया जाना है: cornerRadius, shadowColor, shadowOffset, shadowRadius, shadowOpacity, maskToBounds.

8
vandernat.p 16 सितंबर 2017, 20:32
जांच UIAppearance
 – 
JuicyFruit
16 सितंबर 2017, 20:33
1
आप UIButton का एक उपवर्ग क्यों नहीं बनाते जिसमें ये सभी स्टाइलिंग विशेषताएँ हों और आपके सभी बटन UIButton के बजाय उस उपवर्ग का उपयोग करें।
 – 
Lamour
16 सितंबर 2017, 20:38
धन्यवाद, यह सबसे अच्छा समाधान होगा।
 – 
vandernat.p
16 सितंबर 2017, 20:45
तुम्हारा बहुत स्वागत है
 – 
Lamour
16 सितंबर 2017, 20:51

5 जवाब

सबसे बढ़िया उत्तर

UIComponents के लिए एक्सटेंशन बनाएं, जिसे आप सामान्य शैली जोड़ना चाहते हैं।

जैसे UIButton के मामले में

extension UIButton {
    open override func draw(_ rect: CGRect) {
        //provide custom style
        self.layer.cornerRadius = 10 
        self.layer.masksToBounds = true
    }
}

या UIButton का एक उपवर्ग बनाएं और वह सभी स्टाइल प्रदान करें जिन्हें आप लागू करना चाहते हैं और सुनिश्चित करें कि आपके बटन आपकी कस्टम कक्षा से विस्तारित हैं

class MyButton : UIButton {

   override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
      }

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

   private func setup() {
        self.layer.cornerRadius = 10
        self.layer.masksToBounds = true
      }

}
15
Ahmet Sina 7 अक्टूबर 2019, 13:51
: कोड रिफैक्टरिंग के लिए धन्यवाद :) बहुत सराहना की
 – 
Sandeep Bhandari
16 सितंबर 2017, 20:50

आप इस तरह UIAppearance api का उपयोग कर सकते हैं:

UIButton.appearance().layer.cornerRadius = 4
UIButton.appearance().layer.shadowColor = UIColor.white.cgColor
UIButton.appearance().layer.shadowOffset = CGSize(width: 2, height: 2)
UIButton.appearance().layer.shadowRadius = 5
UIButton.appearance().layer.shadowOpacity = 0.5
UIButton.appearance().layer.masksToBounds = true

इसका उपयोग करके, आपके एप्लिकेशन के प्रत्येक UIButton में ये दृश्य गुण आपके द्वारा परिभाषित किए गए पर सेट होंगे।

आप इस एपीआई के बारे में अधिक जानकारी https://developer.apple.com/documentation/uikit पर प्राप्त कर सकते हैं। /uiappearance

3
andrehungaro 16 सितंबर 2017, 20:54

आप IBInspectable का उपयोग करके कस्टम क्लास बना सकते हैं। ताकि आप UI से बदल सकें।====>

class NSCustomButton: UIButton {

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

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

    @IBInspectable var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
            self.clipsToBounds = true
            self.layer.masksToBounds = true
        }
    }

    @IBInspectable var cornerRadiusByHeight: Bool = false {
        didSet {
            layer.cornerRadius = self.frame.size.height/2
        }
    }

    @IBInspectable var roundButton: Bool = false {
        didSet {
            layer.cornerRadius = self.frame.size.width / 2
            self.clipsToBounds = true
            self.layer.masksToBounds = true
        }
    }


    @IBInspectable var shadowColor: UIColor = UIColor.clear {

        didSet {

            layer.shadowColor = shadowColor.cgColor
            layer.masksToBounds = false
        }
    }


    @IBInspectable var shadowOpacity: CGFloat = 0.0 {

        didSet {

            layer.shadowOpacity = Float(shadowOpacity.hashValue)
            layer.masksToBounds = false
        }
    }

    @IBInspectable var shadowRadius: CGFloat = 0.0 {

        didSet {

            layer.shadowOpacity = Float(shadowRadius.hashValue)
            layer.masksToBounds = false
        }
    }

    override internal func awakeFromNib() {
        super.awakeFromNib()
    }

}
3
arpita 19 फरवरी 2018, 14:00
अच्छा समाधान। लेकिन ध्यान रखें कि एक बार आपका प्रोजेक्ट बड़ा हो जाने पर IBInspectable थोड़ा गड़बड़ और अविश्वसनीय है। हमें एक बड़े प्रोजेक्ट पर आईबी से यह सारा सामान हटाना पड़ा क्योंकि यह लंबे संकलन और प्रशंसकों की तरह पागलों की तरह घूम रहा था।
 – 
smileBot
24 फरवरी 2021, 02:19

आप एक वर्ग को परिभाषित कर सकते हैं और बस इसे अपने बटन पर सेट कर सकते हैं और इसे awakeFromNib() विधि में कॉन्फ़िगर कर सकते हैं।

@IBOutlet weak var myButton: MyCustomButton!


class MyCustomButton : UIButton{
    override func awakeFromNib() {
        super.awakeFromNib()
        setTitleColor(UIColor.black, for: .normal)
        layer.cornerRadius = 6
        backgroundColor = UIColor.red
        layer.borderWidth = 0.5
        layer.borderColor = UIColor.VFGGray.cgColor
    }
}

इस तरह आपके सभी बटन एक जैसे दिखाई देंगे। आशा है कि इससे सहायता मिलेगी

2
Pablo Blanco 10 सितंबर 2019, 13:41

UIButton api a का उपयोग करें जो बटन शैली को धारण करेगा और फिर इसके सभी बटनों के अनुरूप होगा।

0
Ingo 16 सितंबर 2017, 22:17