2016-03-27 6 views
2

にUITableViewCellの内側のUITextFieldへの完全自動の追加私はここはスウィフト

https://stackoverflow.com/a/32948918/5447089

の提案に従っしかし、テキストフィールドがUIViewController内にあるときに動作するようです。私の場合、TFはUITableViewCellの中にあり、自動補完のためのデータがあるときは、提案のあるテーブルは表示されません。

cellForRowAtIndexPathは呼び出されません。 numberOfRowsInSectionのような他のデリゲートメソッドは正常に動作します。

これはどのような理由が考えられますか?

import UIKit 
import CoreData 

class AddElemTableViewCell: UITableViewCell, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource { 

    @IBOutlet weak var myTextField: UITextField! 

    var autocompleteTableView = UITableView(frame: CGRectMake(0,80,320,120), style: UITableViewStyle.Plain) 

    var elements = [“Beer”, “Bear”, “Park”, “Pad”] 
    var autocompleteElements = [String]() 

    var currentElem: Elem! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     myTextField.delegate = self 
     autocompleteTableView.delegate = self 
     autocompleteTableView.dataSource = self 
     autocompleteTableView.scrollEnabled = true 
     autocompleteTableView.hidden = true 

     myTextField.addTarget(self, action: #selector(AddElemTableViewCell.didChangeText(_:)), forControlEvents: .EditingChanged) 
    } 


    func didChangeText(textField:UITextField) { 
     autocompleteTableView.hidden = false 
     let substring = (myTextField.text! as NSString) 
     searchAutocompleteEntriesWithSubstring(substring as String) 


    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

    func searchAutocompleteEntriesWithSubstring(substring: String) 
    { 
     autocompleteElements.removeAll(keepCapacity: false) 

     for curString in elements 
     { 
      let myString:NSString! = curString as NSString 

      let substringRange :NSRange! = myString.rangeOfString(substring,options: [.CaseInsensitiveSearch]) 

      if (substringRange.location == 0) 
      { 
       autocompleteElements.append(curString) 
      } 
     } 

     autocompleteTableView.reloadData() 
    } 

    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     if textField == myTextField { 
      if (textField.text!.characters.count > 0) { 
       let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
       let managedObjectContext = appDelegate.managedObjectContext 

       let entityElement = NSEntityDescription.entityForName("element", inManagedObjectContext: managedObjectContext) 

       let element = element(entity: entityElement!, insertIntoManagedObjectContext: managedObjectContext) 

       element.name = textField.text! 

       do { 
        try managedObjectContext.save() 
       } catch { 
        let saveError = error as NSError 
        print(saveError) 
       } 

       textField.text! = "" 
       textField.placeholder = “add new element” 
       self.endEditing(true) 

      } 
     } 
     return true 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return autocompleteElements.count 
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 


     let autoCompleteRowIdentifier = "AutoCompleteRowIdentifier" 
     let cell = UITableViewCell(style: UITableViewCellStyle.Default , reuseIdentifier: autoCompleteRowIdentifier) 
     let index = indexPath.row as Int 

     cell.textLabel!.text = autocompleteElements[index] 
     return cell 
    } 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let selectedCell : UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)! 
     myTextField.text = selectedCell.textLabel!.text 
    } 


} 
+1

本当にすべてのコードを投稿する必要があります。プログラミングバグを作る方法は無限にあります。 :-) – BaseZen

+0

@BaseZenコードを編集しました。 'AddElemTableViewCell'はDynamic Prototypeセルです。 – orca

答えて

0

問題がある:

  1. あなたは階層を表示するautoCompleteTableViewを追加しませんでした。
  2. セルのサブビューとして追加すると、セルの範囲内になり、他のセルを超えることはできません。

私は私のプロジェクトで2番目の問題を解決するために取り組んでいます。だから私はまだ正解がありません