PopUpPicker - 不符合协议

时间:2015-02-16 04:05:54

标签: popup protocols textfield picker

我对Swift和编程很新。

我正在尝试在文本字段中添加弹出选择器,当用户从选择器中选择项目时,他们可以按下文本字段中显示的项目,然后PopUp消失。

我已成功使用弹出日期选择器实现此功能,因为我已成功使用GutHub中的此功能。我认为为我的Pop Up Picker模仿这个代码很容易,事实证明这个代码比预期更困难。

我有一个单独的XIB文件,它使用Picker和OK按钮保存视图。然后,我有两个swift文件,一个用于PopViewController,另一个用于PopPicker。

甚至不确定此代码是否正确,但我得到的错误是我的Picker不符合协议。两个文件的代码如下。

PopEngineViewController

import UIKit

protocol EnginePickerViewControllerDelegate : class {

func enginePickerVCDismissed(string: UITextField?)
}

class PopEngineViewController: UIViewController {

@IBOutlet weak var container: UIView!
@IBOutlet weak var enginePicker: UIPickerView!
weak var delegate : EnginePickerViewControllerDelegate?

override convenience init() {

    self.init(nibName: "PopEnginePicker", bundle: nil)
}


override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func viewDidDisappear(animated: Bool) {

    self.delegate?.enginePickerVCDismissed(nil)
}
}

和PopEnginePicker

import UIKit

public class PopEnginePicker : NSObject, UIPopoverPresentationControllerDelegate, EnginePickerViewControllerDelegate {

public typealias PopEnginePickerCallback = (forTextField : UITextField)->()

var enginePickerVC : PopEngineViewController
var popover : UIPopoverPresentationController?
var textField : UITextField!
var dataChanged : PopEnginePickerCallback?
var presented = false
var offset : CGFloat = 8.0


public init(forTextField: UITextField) {

enginePickerVC = PopEngineViewController()
self.textField = forTextField
super.init()
}

public func pick(inViewController : UIViewController, dataChanged : PopEnginePickerCallback) {


    if presented {
        return  // we are busy
    }

    enginePickerVC.delegate = self
    enginePickerVC.modalPresentationStyle = UIModalPresentationStyle.Popover
    enginePickerVC.preferredContentSize = CGSizeMake(500,208)


    popover = enginePickerVC.popoverPresentationController
    if let _popover = popover {

        _popover.sourceView = textField
        _popover.sourceRect = CGRectMake(self.offset,textField.bounds.size.height,0,0)
        _popover.delegate = self
        self.dataChanged = dataChanged
        inViewController.presentViewController(enginePickerVC, animated: true, completion: nil)
        presented = true
    }


}

func adaptivePresentationStyleForPresentationController(PC: UIPresentationController!) -> UIModalPresentationStyle {

    return .None
}

}

我甚至不确定我是否会走错路,但是我希望它看起来像下面一样,就像我在日期选择器中所做的那样,如下面的链接所示:

http://coding.tabasoft.it/ios/a-simple-ios8-popdatepicker/

0 个答案:

没有答案