xcode

2015-08-04 10 views
6

में स्विफ्ट का उपयोग करके टेक्स्ट फ़ील्ड की पैडिंग सेट करें स्विफ्ट का उपयोग करके टेक्स्ट फ़ील्ड की शुरुआत में कुछ जगह कैसे बनाएं? मैं पदxcode

padding of text field

को देखा मुझे समझ नहीं आता क्या उपवर्ग कर रहा है और कैसे मैं गद्दी के उस वर्ग का उपयोग करते हैं।

आपको बहुत बहुत

+0

मुझे लगता है कि इस सवाल का जवाब आप https://stackoverflow.com/a/46730692/8231150 मदद कर सकते हैं –

उत्तर

12

https://stackoverflow.com/a/27066764/846780

इस उत्तर बहुत स्पष्ट है,

  1. धन्यवाद UITextField उपवर्ग यदि आप ओवरराइड कर सकते हैं textRectForBounds, editingRectForBounds और placeholderRectForBounds। ये विधियां आपको अपने टेक्स्टफील्ड के लेबल में एक रेक्ट (फ्रेम) जोड़ने की अनुमति देती हैं।

  2. newBounds विधि रीक्ट (फ्रेम) बनाएं जो टेक्स्टफील्ड के लेबल में जोड़ा जाएगा।

  3. अंत में अपने गद्दी है: let padding = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5);

  4. अब आप एक कस्टम गद्दी है कि एक कस्टम UITextField की है।

  5. उदाहरण के लिए, यदि आप इस class MyTextField: UITextField की तरह अपना नया सब क्लास बनाते हैं, तो आपको केवल यूआईटीक्स्टफिल्ड की श्रेणी को बदलना होगा जिसे आपने आईबी फाइल में जोड़ा है।

enter image description here

+0

आपको बहुत बहुत धन्यवाद! मैं अपने टेक्स्टफील्ड की कक्षा को नए उप-वर्ग में बदलना भूल गया। पैडिंग अभी डिफ़ॉल्ट पैडिंग पर सेट है जो है (शीर्ष: 0, बाएं: 5, नीचे: 0, दाएं: 5)। क्या होगा यदि मैं हर बार सबक्लास संपादित किए बिना पैडिंग को संशोधित करना चाहता हूं? मैंने इसे देखने के लिए जोड़ा नियंत्रक "myTextField.textRectForBounds (CGRect (x: 20, y: 0, चौड़ाई: 0, ऊंचाई: 0))" जैसा कि मैं बाएं से अधिक पैडिंग प्राप्त करना चाहता हूं। लेकिन कुछ भी नहीं बदला। क्या आप इसके साथ मेरी मदद कर सकते हैं? – sekaisan

9

TextField आउटलेट और उपयोग कोड निम्नलिखित बनाएँ। कहें "nameTextField" को पैडिंग जोड़ना है।

let paddingView = UIView(frame: CGRectMake(x: 0, y: 0, width: 30, height: 30)) 
nameTextField.leftView = paddingView 
nameTextField.leftViewMode = .always 
nameTextField.placeholder = "Enter Name" 

आप पैडिंग व्यू में छवि जोड़ सकते हैं।

9

klevison-मटीस इस बात का जवाब पूरक कोड का उपयोग मैं जब मैं स्विफ्ट 3

//UITextField : override textRect, editingRect 
class LeftPaddedTextField: UITextField { 

    override func textRect(forBounds bounds: CGRect) -> CGRect { 
     return CGRect(x: bounds.origin.x + 10, y: bounds.origin.y, width: bounds.width, height: bounds.height) 
    } 

    override func editingRect(forBounds bounds: CGRect) -> CGRect { 
     return CGRect(x: bounds.origin.x + 10, y: bounds.origin.y, width: bounds.width, height: bounds.height) 
    } 

} 

तब मेरे TextField में मैं इस तरह से उपयोग करने में मेरी TextField करने के लिए एक गद्दी जोड़ना चाहते है:

let emailTextField: LeftPaddedTextField = { 
    let textField = LeftPaddedTextField() 
    textField.placeholder = "Enter email" 
    textField.layer.borderColor = UIColor.lightGray.cgColor 
    textField.layer.borderWidth = 1 
    textField.keyboardType = .emailAddress 
    return textField 
}() 

let passwordTextField: LeftPaddedTextField = { 
    let textField = LeftPaddedTextField() 
    textField.placeholder = "Enter password" 
    textField.layer.borderColor = UIColor.lightGray.cgColor 
    textField.layer.borderWidth = 1 
    textField.isSecureTextEntry = true 
    return textField 
}() 
+0

क्या आपको लौटाए गए सीजीआरईटी की चौड़ाई से अपने इन्सेट्स को घटाना नहीं है? अन्यथा आपका टेक्स्ट clearTextIndicator या UITextField में निहित अन्य दृश्यों को अवरुद्ध कर देगा। – finngu

0

@ जॉर्ज कैसरिगो के उत्तर के आधार पर मैं इस समाधान के साथ आया था।

आप PaddedTextField कक्षा और इंटरफेस बिल्डर के माध्यम से वांछित पैडिंग सेट कर सकते हैं!