2015-10-09 2 views
1

У меня есть код, который с json возвращает массив со всеми именами, хранящимися в базе данных, а когда вы вводите textField, вы можете увидеть предложение и так автозаполнение. Все отлично работает, единственная проблема - это чувствительность к регистру, на самом деле, если я пишу «привет», он ничего не найдет, вместо этого, если я наберу «Привет», он предложит тег .. как я могу это исправить? Большое спасибо. Я не нашел никакого учебника об этом.Swift 1/2 Автозаполнение поля нечувствительно к регистру

Это мой код:

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) 

} 

}

ответ

0

Во-первых, если вы просто пытаетесь сделать поиск префиксов, вы можете использовать метод hasPrefix:. Простой способ использовать этот метод и не рассматривать дело было бы получить строчную версию каждой строки перед вызовом метода сравнения:

if (myString.lowercaseString.hasPrefix(substring.lowercaseString)) 
{ 
    autocompleteUrls.append(curString) 
} 

Если вы не возражаете переключения обратно NSString типов, вы можете также использовать rangeOfString:options: метод:

let range = (myString as NSString).rangeOfString(substring, options:[.CaseInsensitiveSearch]) 
if range.location == 0 { 
    autocompleteUrls.append(curString) 
} 
+0

Это отлично работает, спасибо! – Marcoc

Смежные вопросы