gpt4 book ai didi

ios - UIAlertController 中不同的 UIPickerView 委托(delegate)/数据源

转载 作者:行者123 更新时间:2023-11-30 13:30:13 26 4
gpt4 key购买 nike

请告诉我如何使用不同的委托(delegate)/数据源制作两个不同的 UIPickerView?我有带有两个单元格的 TableView,我需要使用 UIPickerView 打开两个不同的 UIAlertController。我的代码:

private weak var filterController: UIAlertController! {

let controllerConfig = UIAlertController(title: "", message: "\n\n\n\n\n\n\n\n\n", preferredStyle: .Alert)

controllerConfig.modalInPopover = true

//Create UIPickerView
let pickerFrame = CGRectMake(0, 20, 270, 180)
let picker = UIPickerView(frame: pickerFrame)
//Picker Color
picker.backgroundColor = controllerConfig.view.backgroundColor

//Picker Delegate/DataSource
picker.delegate = self
picker.dataSource = self

//Add Picker
controllerConfig.view.addSubview(picker)

//Create header frame
let headerFrame = CGRectMake(0, 5, 270, 45)
let headerView = UIView(frame: headerFrame)
headerView.backgroundColor = controllerConfig.view.backgroundColor

//Create 'Close' button
var closeButton: UIButton! {
let buttonFrame = CGRectMake(230, 5, 35, 35)
let buttonConfig = UIButton(frame: buttonFrame)
buttonConfig.setTitle("X", forState: .Normal)
//Set color on text
buttonConfig.setTitleColor(UIColor.grayColor(), forState: .Normal)
buttonConfig.setTitleColor(erablagoThemeColor, forState: .Highlighted)
buttonConfig.addTarget(self, action: #selector(didClickOnCloseButton), forControlEvents: .TouchUpInside)

return buttonConfig
}

let showAction = UIAlertAction(title: "Select", style: .Default) { (action) in
//TODO
}

//Add subview
headerView.addSubview(closeButton)
controllerConfig.addAction(showAction)
controllerConfig.view.addSubview(headerView)

return controllerConfig
}

///Close current view
func didClickOnCloseButton() {
dismissViewControllerAnimated(true, completion: nil)
}

我已经实现了 UIPickerViewDelegate 和 UIPickerViewDataSource。我需要在我的 ViewContriller 中更改此实现。

//MARK: - UIPickerViewDataSource
extension FilterController: UIPickerViewDataSource {
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return 2
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
switch row {
case 0:
return "All"
case 1:
return "Cars and Bicycles"
default:
return nil
}
}

}

我可能需要使用 UIAlertController 创建类并在我的 ViewController 中调用他?我不知道。预先感谢您:]

最佳答案

当您说您希望选择器具有不同的委托(delegate)时,您是在建议不同的类负责处理委托(delegate)方法。因此,以下内容将解决您的问题:

picker.delegate = self
picker2.delegate = anotherClassInstance

但我不认为这就是你要问的。我认为您问的是如何让两个具有不同数据的不同选择器都由同一个类处理,从而共享同一个委托(delegate)类。最简单的方法是在每个选择器上分配标签属性:

picker.delegate = self
picker.tag = 1
picker2.delegate = self
picker2.tag = 2

然后,区分它们:

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if picker.tag == 1 {
switch row {
case 0:
return "All"
case 1:
return "Cars and Bicycles"
default:
return nil
} else {

switch row {
case 0:
return "None"
case 1:
return "Other picker data"
default:
return nil
}
}

关于ios - UIAlertController 中不同的 UIPickerView 委托(delegate)/数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36649133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com