2016-12-01 4 views
6

में एक दृश्य से सभी टेक्स्टफील्ड कैसे प्राप्त करें मेरे पास एक दृश्य है जिसमें 15 से अधिक UITextFields है। मुझे सभी UITextFields के लिए नीचे सीमा (एक्सटेंशन) सेट करना होगा। मैं इसे सभी UITextFields के लिए एक-एक करके सेट कर सकता हूं और यह भी काम कर रहा है। मैं एक बार में सभी UITextFields के लिए नीचे सीमा निर्धारित करना चाहता हूं। यहां वह कोड है जिसे मैं कोशिश कर रहा हूं लेकिन ऐसा लगता है कि लूप निष्पादित नहीं हो रहा है। मैंने इसे viewDidLayoutSubViews में भी आजमाया है लेकिन लूप के लिए भी वहां निष्पादित नहीं किया गया है।स्विफ्ट

override func viewDidLoad() 
{ 
    super.viewDidLoad() 

    /** setting bottom border of textfield**/ 

    for case let textField as UITextField in self.view.subviews { 
     textField.setBottomBorder() 
    } 
} 
+2

इस 'self.view.subviews.filter कोशिश ({$ 0 है UITextField})। foreach ({$ 0.setBottomBorder()})' –

+0

यह मेरा विस्तार के कारण उपयोग नहीं कर सकते "UITextField" प्रकार का है। मेरा एक्सटेंशन देखने के लिए उपलब्ध नहीं होगा। –

उत्तर

6

मैं यह काम कर रहा बनाया है, लेकिन अभी भी स्पष्टीकरण क्यों की जरूरत है प्रश्न में कोड एन है काम कर रहे हैं
मुझे इसे मंच पर कहीं से मिला, जवाब देने में सक्षम नहीं है।

/** extract all the textfield from view **/ 
func getTextfield(view: UIView) -> [UITextField] { 
var results = [UITextField]() 
for subview in view.subviews as [UIView] { 
    if let textField = subview as? UITextField { 
     results += [textField] 
    } else { 
     results += getTextfield(view: subview) 
    } 
} 
return results 

उपर्युक्त फ़ंक्शन को देखने में कॉल करें DidLoad या ViewDidLayoutSubviews।

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

/** setting bottom border to the textfield **/ 
    let allTextField = getTextfield(view: self.view) 
    for txtField in allTextField 
    { 
     txtField.setBottomBorder() 
    } 
} 
2

इस

for aSubView: Any in self.view.subviews { 
if (aSubView is UITextField) { 
    var textField = (aSubView as! UITextField) 
    textField. setBottomBorder() 
} 
}  

कोशिश या कोशिश इस

for view in self.view.subviews { 
if (view is UITextField) { 
    var textField = view as! UITextField 
     textField. setBottomBorder() 
} 
} 
+0

मुझे लगता है कि पहले कोड स्निपेट की कोई आवश्यकता नहीं है। –

+0

काम नहीं कर रहा है, अगर नियंत्रण –

0

प्रयास करें इस :)

for view in self.view.subviews as! [UIView] { 
    if let textField = view as? UITextField { 
     textField.setBottomBorder() 
    } 
} 
1

यह मेरे लिए काम करता था।

var textFieldsArray = [UITextField]() 

for view in self.view.subviews { 
    if view is UITextField { 
     textFieldsArray.append(view as! UITextField) 
    } 
} 

textFieldsArray.forEach { $0.setBottomBorder() } 

आप समारोह एक नई सरणी में लागू करने का परिणाम प्राप्त करना चाहते हैं, मानचित्र का उपयोग() के बजाय।

0
func getTextFields() { 
    for textField in view.subviews where view is UITextField { 
     (textField as? UITextField).setBottomBorder() 
    } 
} 
1

विस्तार:

extension UIView { 
    func viewOfType<T:UIView>(type:T.Type, process: (_ view:T) -> Void) 
    {   
     if let view = self as? T 
     { 
      process(view) 
     } 
     else { 
      for subView in subviews 
      { 
       subView.viewOfType(type:type, process:process) 
      } 
     } 
    } 
} 

उपयोग:

view.viewOfType(type:UITextField.self) { 
     view in 

     view.text = "123" 
} 
+0

से बाहर कूद रहा है यह बहुत लचीला और उपयोग करने में बहुत आसान है! –

6

स्विफ्ट: यह समारोह एक दृश्य में सभी पाठ क्षेत्रों वापस आ जाएगी। कोई फर्क नहीं पड़ता कि क्षेत्र किसी भी सबव्यू में मौजूद है। ;-)

func getAllTextFields(fromView view: UIView)-> [UITextField] { 
    return view.subviews.flatMap { (view) -> [UITextField]? in 
     if view is UITextField { 
      return [(view as! UITextField)] 
     } else { 
      return getAllTextFields(fromView: view) 
     } 
    }.flatMap({$0}) 
} 

उपयोग:

_=getAllTextFields(fromView : self.view).map{($0.text = "Hey dude!")} 
0

स्विफ्ट 4 और स्विफ्ट 3: -
एक बहुत ही सरल जवाब आप समझ easyly कर सकते हैं: - आप UILable की तरह वस्तुओं की सभी प्रकार संभाल कर सकते हैं , यूआईटीएक्स्टफील्ड्स, यूआईबूटन, यूआईवीव, यूआईएममेज। objecs आदि के किसी भी प्रकार

for subviews in self.view.subviews 
    { 
     if subviews is UITextField 
     { 
      //MARK: - if the sub view is UITextField you can handle here 
      funtextfieldsetting(textfield: subviews as! UITextField) 
     } 
     if subviews is UIButton 
     { 
     //MARK: - if the sub view is UIButton you can handle here 
      funbuttonsetting(button: subviews as! UIButton) 
     } 
     if subviews is UILabel 
     { 
     //MARK: - if the sub view is UILabel you can handle here 
     //Any thing you can do it with label or textfield etc 

     } 
    }