Getting autocomplete to work in swift

前端 未结 12 538
清酒与你
清酒与你 2020-12-04 15:55

I am trying to implement autocompletion, but can\'t find an example that works in Swift. Below, I\'m tring to convert Ray Wenderlich\'s autocompletion tutorial and example c

12条回答
  •  旧巷少年郎
    2020-12-04 16:33

    Got it working with the below. The upper/lower case threw it off initially. I'm using it to autocomplete country names...

    import UIKit
    
    class billingAddressViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {
    
    
        @IBOutlet var countryTextField: UITextField!
        @IBOutlet var countryTableView: UITableView!
    
        var autocompleteCountries = [String]()
    
        // Get list of countries
        let countries = NSLocale.ISOCountryCodes().map { (code:String) -> String in
            let id = NSLocale.localeIdentifierFromComponents([NSLocaleCountryCode: code])
            return NSLocale(localeIdentifier: "en_US").displayNameForKey(NSLocaleIdentifier, value: id) ?? "Country not found for code: \(code)"
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            countryTextField.delegate = self
    
            countryTableView!.delegate = self
            countryTableView!.dataSource = self
            countryTableView!.scrollEnabled = true
            countryTableView!.hidden = true
        }
    
        func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    
            print("text field has changed")
            countryTableView!.hidden = false
    
            let substring = (self.countryTextField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
            print(substring)
            searchAutocompleteEntriesWithSubstring(substring)
            return true
        }
    
        func searchAutocompleteEntriesWithSubstring(substring: String) {
            autocompleteCountries.removeAll(keepCapacity: false)
            print(substring)
    
            for curString in countries {
                //print(curString)
                let myString: NSString! = curString.lowercaseString as NSString
                let substringRange: NSRange! = myString.rangeOfString(substring.lowercaseString)
                if (substringRange.location == 0) {
                    autocompleteCountries.append(curString)
                }
            }
    
            countryTableView!.reloadData()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    
        func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return autocompleteCountries.count
        }
    
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let autoCompleteRowIdentifier = "AutoCompleteRowIdentifier"
            var cell = tableView.dequeueReusableCellWithIdentifier(autoCompleteRowIdentifier) as UITableViewCell!
    
            if let tempo1 = cell {
                let index = indexPath.row as Int
                cell!.textLabel!.text = autocompleteCountries[index]
            }
    
            else {
                cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: autoCompleteRowIdentifier)
            }
    
            return cell!
        }
    
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            let selectedCell : UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
            countryTextField.text = selectedCell.textLabel!.text
            countryTableView.hidden = true
        }
    
    }
    

提交回复
热议问题