我有一个带有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版本:
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)
}
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()
}
}
感谢您寻找并抱歉,如果我犯了简单的错误。我试图通过编码来学习。
答案 0 :(得分:0)
你可以在一个故事板(Viewcontroller类)中添加你想要的多少视图。但是你不能将一个ViewController作为快速支持single inheritance
加载到另一个ViewController中。
在你的代码中
let pickerInputView = pickerWithDoneViewController()
在这一行你要创建一个类的实例,这也是扩展UIViewController类使它成为多重继承