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

时间:2015-10-12 17:42:51

标签: ios iphone swift uitextfield swift2

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

CODE:

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)
    }

1 个答案:

答案 0 :(得分:0)

尝试使用以下

替换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()
}