Swift 1/2 TextField标签显示所有名称



我有一个文本字段,当您键入一个名称时,应该显示从JSON数组中获取的建议名称,问题是它只显示一个名称。例如,如果我输入Tom,它只显示Tom Cruise而不是Tommy Gien。我该如何解决这个问题?

代码:

class ViewController: UIViewController, UITextViewDelegate, UITextFieldDelegate,UITableViewDataSource, UITableViewDelegate {
    let save = NSUserDefaults.standardUserDefaults()
    @IBOutlet var amountPoints: UILabel!
    @IBOutlet var reasonView: UITextView!
    @IBOutlet var toField: UITextField!
    @IBOutlet var pointsField: UITextField!
    @IBOutlet var autocompleteTableView: UITableView!
    var pastUrls: [String] = []
    var autocompleteUrls = [String]()
    override func viewDidLoad() 
    {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        toField.delegate = self
        reasonView.layer.cornerRadius = 1
        reasonView.layer.borderWidth = 0.7
        reasonView.layer.borderColor = UIColor.grayColor().CGColor
        autocompleteTableView.delegate = self
        autocompleteTableView.dataSource = self
        autocompleteTableView.scrollEnabled = true
        autocompleteTableView.hidden = true
        getallUser()
        var Names = save.arrayForKey("give.Name")
        pastUrls = Names as! [String]
        print(pastUrls)
    }
    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool 
    {
        autocompleteTableView.hidden = false
        let substring = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string)
        searchAutocompleteEntriesWithSubstring(substring)
        return true     // not sure about this - could be false
    }
    func searchAutocompleteEntriesWithSubstring(substring: String) 
    {
        autocompleteUrls.removeAll(keepCapacity: false)
        for curString in pastUrls
        {
            let myString:NSString! = curString as NSString
            let substringRange :NSRange! = myString.rangeOfString(substring)
            if (substringRange.location  == 0)
            {
                autocompleteUrls.append(curString)
            }
        }
        autocompleteTableView.reloadData()
    }
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return autocompleteUrls.count
    }
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let autoCompleteRowIdentifier = "AutoCompleteRowIdentifier"
        let cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier(autoCompleteRowIdentifier, forIndexPath: indexPath) as UITableViewCell
        let index = indexPath.row as Int
        cell.textLabel!.text = autocompleteUrls[index]
        return cell
    }
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        let selectedCell : UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)!
        toField.text = selectedCell.textLabel!.text
        autocompleteTableView.hidden = true
    }
    func textViewDidBeginEditing(textView: UITextView) {
        reasonView.text = ""
    }
    func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
        if text == "n"
        {
            textView.resignFirstResponder()
            return false
        }
        return true
    }
    @IBAction func giveButton(sender: UIButton) {
    }
    @IBAction func returnButton(sender: UIBarButtonItem) {
        self.dismissViewControllerAnimated(true, completion: nil)
    }

尝试用以下

替换seachAutocompleteEntriesWithSubtring中的方法
func searchAutocompleteEntriesWithSubstring(substring: String)
{
    autocompleteUrls.removeAll(keepCapacity: false)
    for curString in pastUrls
    {
        var myString:NSString! = curString as NSString
        var substringRange :NSRange! = myString.rangeOfString(substring)
        if (substringRange.location  == 0)
        {
            autocompleteUrls.append(curString)
        }
    }
    autocompleteTableView.reloadData()
}

最新更新