2016-04-19 80 views
0

我試圖實現一個TableView,它覆蓋了一個UITextViews InputView,爲用戶提供一個可搜索的TableView,然後用選定的值填充UITextField。UITextView InputView UITableViewController

我已經搜索了一個公平的位,我發現最接近的解決方案是this,但我不知道如何將UITableViewController關聯到我的UITextViews InputView?

我可以看到,這些功能都被稱爲在MultiSelectPicker ...

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int 

但這些都不是我我相當肯定解釋了爲什麼我沒有看到任何東西填充表視圖。

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

override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 

我已經改變了didSet所以我知道reloadData被從主線程,仍然沒有叫。

var items = [NSObject](){ 
    didSet{ 
     dispatch_async(dispatch_get_main_queue(),{ 

      self.tableView.reloadData() 

     }); 
    } 
} 

它可能是與我設置inputView在我的主視圖控制器的方式,但我是相當新的iOS和斯威夫特所以我可能失去了一些東西基本。

@IBOutlet weak var mspEmployee: MultiSelectPicker! 

    let employeePickerView = MultiSelectPicker() 
    employeePickerView.items = self.oEmployees 
    self.mspEmployee = employeePickerView 
    self.txtEmployee.inputView = self.mspEmployee.view 

這真的是讓我發瘋,所以任何幫助,將不勝感激!

回答

0

您需要繼承UITextField並將inputView設置爲您的UITableView的視圖。這裏是我最近做的一些類似的實現。

class BaseTextField: UITextField{ 

    //Base textfield so that all custom textfields inherit the disabling of certain uitextfield things 
    required init?(coder aDecoder: NSCoder) { 

     super.init(coder: aDecoder) 

     //disabling menu, autocorrection and copy paste functionality 
     autocorrectionType = UITextAutocorrectionType.No 
     inputAssistantItem.leadingBarButtonGroups = [] 
     inputAssistantItem.trailingBarButtonGroups = [] 
    } 

    override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool { 
     NSOperationQueue.mainQueue().addOperationWithBlock {() -> Void in 
      UIMenuController.sharedMenuController().setMenuVisible(false, animated: false) 
     } 
     return false 
    } 
} 


class OptionSelectText: BaseTextField{ 
    let picker:OptionPicker //this is the UITableViewController I Use for selecting values 
    required init?(coder aDecoder: NSCoder) { 
     picker = OptionPicker() 
     picker.view.translatesAutoresizingMaskIntoConstraints = false 
     super.init(coder: aDecoder) 

     picker.delegate = self 
     let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: picker.view.frame.width, height: 44)) 

     let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: #selector(OptionSelectText.pickerViewDoneAction)) 
     let flex = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil) 
     let clearButton = UIBarButtonItem(title: "Clear", style: UIBarButtonItemStyle.Plain, target:self, action: #selector(OptionSelectText.pickerClearAction)) 
     toolbar.setItems([clearButton, flex, doneButton], animated: false) 
     toolbar.userInteractionEnabled = true 
     inputView = picker.view 
     inputAccessoryView = toolbar 
    } 
} 
+0

非常感謝您的回覆! - 我已經實現了OptionSelectText作爲一個新類,但我得到一個錯誤,'picker.delegate = self'說不能分配'OptionSelectText'類型'MultiSelectPickerDelegate'的值 - 如何OptionPicker不同於你發佈的MultiSelectPicker代碼在原來的?如果這些都是愚蠢的問題,我很新,很抱歉 – Tim

+0

只需更改OptionPicker以使用您的multiselectpicker類 –

+0

是的,我改變了 - 是否因爲MultiSelect中的協議實現 - 您的OptionSelect中有嗎?類OptionSelectText:BaseTextField { 讓利選擇器:MultiSelectPicker //這是我的UITableViewController使用選擇值 所需的init(編碼器aDecoder:NSCoder){ 選擇器= MultiSelectPicker() picker.view.translatesAutoresizingMaskIntoConstraints =假 super.init (編碼器:aDecoder) picker.delegate =自 – Tim

相關問題