从Textfield.inputview加载xib UIView

时间:2015-04-20 10:32:55

标签: swift xib nib

我有一个带有UIPickerView和Done按钮的自定义xib(UIView)。

我正在尝试将其加载为文本字段的输入视图。

如果我将xib作为UIView并且有一个UIView Class.swift文件,我不知道在哪里放置NSBundle ...将swift文件与xib相关联

如果我使xib成为UIViewController并拥有一个UIViewController.swift,我可以将两者联系起来(或者我认为)但是在我的主viewcontroller.swift中我的textfield.inputview不会获取UIViewController的实例作为输入视图(可能因为它不是UIView)。

我是swift编程的新手,仍然试图以编程方式找出xib,故事板和编写视图/按钮等。

我可以通过编程方式定义视图,向该视图添加UIPicker和按钮,并为按钮指定一个动作(view.EndEditing = true),然后我可以将其设置为输入视图,但我会做喜欢通过xib来做,所以我可以更轻松地设置自动布局。

这是UIViewController版本:

pickWithDoneViewController.swift

import UIKit

class pickerWithDoneViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

  @IBOutlet weak var floorPicker: UIPickerView!
  var myArray = ["1","2","3","4","5","6"]

  //INITIAL METHODS
  override func viewDidLoad() {
    super.viewDidLoad()
    NSBundle.mainBundle().loadNibNamed("pickerWithDoneViewController", owner: self, options: nil)
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
  }

  // PICKER METHODS
  func numberOfComponentsInPickerView(floorPicker: UIPickerView) -> Int {
    return 1
  }

  func pickerView(floorPicker: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return myArray.count
  }

  func pickerView(floorPicker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
    return myArray[row]
  }

  // BUTTON METHODS
  @IBAction func floorPickerDone(sender: AnyObject) {
    view.endEditing(true)
  }

pickerWithDoneViewController.xib:

enter image description here

主ViewController.swift

class ViewController: UIViewController {

  @IBOutlet weak var floorPickerTextField: UITextField!
  let pickerInputView = pickerWithDoneViewController()

  override func viewDidLoad() {
    super.viewDidLoad()
    floorPickerTextField.inputview = pickerInputView
    //***ERROR***:  Cannot assign a value of type 'pickerWithDoneViewController to a value of type UIView?
  }
  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
  }
}

感谢您寻找并抱歉,如果我犯了简单的错误。我试图通过编码来学习。

1 个答案:

答案 0 :(得分:0)

你可以在一个故事板(Viewcontroller类)中添加你想要的多少视图。但是你不能将一个ViewController作为快速支持single inheritance加载到另一个ViewController中。 在你的代码中

let pickerInputView = pickerWithDoneViewController()

在这一行你要创建一个类的实例,这也是扩展UIViewController类使它成为多重继承