2016-02-25 8 views
10

में स्वत: पूर्ण टेक्स्ट फ़ील्ड कैसे बनाएं IOS में एक ऑटो पूर्ण टेक्स्ट फ़ील्ड बनाने में सक्षम होना चाहता हूं।स्विफ्ट

मेरे पास क्लाइंट चुनने के लिए एक फॉर्म है, जिसमें उपयोगकर्ता को टेक्स्ट फ़ील्ड का उपयोग करके क्लाइंट का चयन करना होगा। मैं क्या करना चाहता हूं जब उपयोगकर्ता टेक्स्ट फ़ील्ड पर पहले तीन अक्षरों को लिखता है, तो मैं कुछ सेवा को प्रवेश टेक्स्ट का उपयोग करके दूरस्थ वेब सेवा क्वेरी चलाने के लिए चाहता हूं और क्वेरी परिणामों को ऑटो पूर्ण सुझाव के रूप में प्रस्तुत करता हूं।

नीचे मेरे ऐप (केवल आईपैड) के लिए मेरा वर्तमान कोड है।

import UIKit 

    class AddClientViewController: UIViewController, UITextFieldDelegate { 

     @IBOutlet weak var clientTextField: UITextField! 

     var foundList = [String]() 


    override func viewDidLoad() { 
     super.viewDidLoad() 



     let listUrlString = "http://bla.com/myTextField.php?field=\(clientTextField)" 
     let myUrl = NSURL(string: listUrlString); 
     let request = NSMutableURLRequest(URL:myUrl!); 
     request.HTTPMethod = "GET"; 

     let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
      data, response, error in 

      if error != nil { 
       print(error!.localizedDescription) 
       dispatch_sync(dispatch_get_main_queue(),{ 
        AWLoader.hide() 

       }) 

       return 
      } 


      do { 

       let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSArray 

       if let parseJSON = json { 


        self.foundList = parseJSON as! [String] 

       } 


     } catch { 

      print(error) 

     } 
    } 

    task.resume() 
} 

यहां मेरी जेएसएस आउटपुट है जो मेरी वेब सेवा प्रदान करता है।

["123,John", "343,Smith", "345,April"] 

अल्पविराम के द्वारा अलग, पहले पैरामीटर client ID है और दूसरा पैरामीटर ग्राहक का नाम है। John नाम है इसलिए इसे ऑटो पूर्ण सुझावों में प्रस्तुत किया जाना चाहिए, जो चयनित होने पर clientTextField से John का टेक्स्ट सेट करेगा।

clientTextField की वर्तमान टेक्स्ट सामग्री को मेरे webservice पर एक GET पैरामीटर के रूप में पास किया गया है।

मुझे नहीं पता कि यह कैसे करें। उपयोगकर्ता टाइपिंग और अभी तक समाप्त नहीं हो सकता है, जबकि कई प्रश्न पहले ही भेज दिए जा सकते हैं।

धन्यवाद।

iwillnot: मैंने नीचे स्विफ्ट पर ऑटो पूर्ण टेक्स्ट फ़ील्ड के संदर्भ एकत्र किए। स्विफ्ट

https://github.com/mnbayan/AutocompleteTextfieldSwift (जुलाई 2016)

http://github.com/Mazyod/MJAutoComplete (जुलाई 2015)

http://github.com/hoteltonight/HTAutocompleteTextField (मार्च 2015)

https://github.com/gaurvw/MPGTextField पर स्वत: पूर्ण पाठ फ़ील्ड बनाने के लिए

संदर्भ (जून 2014)

1 9 अगस्त, 2016 को अंतिम अपडेट द्वारा आदेश दिया गया।

+0

: 1. https://github.com/hoteltonight/HTAutocompleteTextField 2. https://github.com/Mazyod/ MJAutoComplete –

उत्तर

2

मैंने संपर्कों को देखने के लिए अपने ऐप में ऐसा कुछ किया। मैं इस कोड बाहर छद्म होगा आप अवधारणा को समझने के लिए:

1) कैप्चर पात्रों enduser

2) कुछ चरित्र पर से पाठ फ़ील्ड में प्रवेश दर्ज गिनती सर्वर क्वेरी करने के लिए सभी प्रविष्टियों से मेल खाने वाले लौटने का निर्णय लेते - उस चरित्र गणना का चयन करें जिसके साथ आप सहज हैं (मैंने लगभग 3-4 वर्ण चुने हैं)। कम रिटर्न अधिक, अधिक स्पष्ट रूप से कम रिटर्न ... आप तक, perf और यूएक्स विचारों।

3) इस सर्वर क्वेरी के परिणाम क्लाइंट पर एक सरणी में रखें। यह आपका सुपरसेट होगा जिससे आप उपयोगकर्ता को सुझाव देंगे।

4) प्रत्येक बाद के चरित्र टेक्स्ट फ़ील्ड में प्रवेश करने के बाद अब आप इस बिंदु पर दर्ज वर्ण स्ट्रिंग द्वारा सरणी (array.filter()) फ़िल्टर करेंगे। 5) तालिका दृश्य।प्रत्येक वर्ण में फ़िल्टर किए गए सरणी के विरुद्ध reloadData() दर्ज किया गया।

6) मैं डेटाफ्लैग वैरिएबल का उपयोग यह निर्धारित करने के लिए करता हूं कि उपयोगकर्ता क्या कर रहा है, इस पर निर्भर करता है कि टेबलव्यू में कौन सा डेटासोर्स दिखाना है।

नोट: आप केवल पर्फ़ प्रभाव को कम करने के लिए एक बार सर्वर क्वेरी

// this function is called automatically when the search control get user focus 
func updateSearchResults(for searchController: UISearchController) { 
    let searchBar = searchController.searchBar 
    if searchBar.text?.range(of: "@") != nil { 
    self.getUserByEmail(searchBar.text!) 
    } 
    if searchController.searchBar.text?.characters.count == 0 && dataFlag != "showParticipants" { 
    dataFlag = "showInitSearchData" 
    self.contacts.removeAll() 
    self.participantTableView.reloadData() 
    } 
    if dataFlag == "showInitSearchData" && searchController.searchBar.text?.characters.count == 2 { 
    self.loadInitialDataSet() { 
     self.dataFlag = "showFilteredSearchData" 
    } 
    } 
    if dataFlag == "showFilteredSearchData" { 
    self.filterDataForSearchString() 
    } 

} 

// filter results by textfield string 
func filterDataForSearchString() { 
    let searchString = searchController.searchBar.text 
    self.filteredContacts = self.contacts.filter({ 
    (contact) -> Bool in 
    let contactText: NSString = "\(contact.givenName) \(contact.familyName)" as NSString 

    return (contactText.range(of: searchString!, options: NSString.CompareOptions.caseInsensitive).location) != NSNotFound 
    }) 

    DispatchQueue.main.async { 
    self.participantTableView.reloadData() 
    } 
} 
कुछ पुस्तकालयों