如何从另一个视图控制器调用UIPickerView子类中的方法?

时间:2017-02-22 12:58:31

标签: swift3 subclass uipickerview

我有一个NSString *url = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"]; NSString *cssString = [NSString stringWithFormat:@".textBox{ background-image:url(%@); background-position: right top; background-repeat: no-repeat; background-size: contain; }",url]; // 1 我正在进行子类化,效果很好。但是,我有一个方法需要调用" reset"来自UIViewController的UIPicker,正在查看它。但是,它永远不会发射。如何从其他视图控制器调用UIPickerView

func resetPicker()

编辑:

以下在调用import Foundation import UIKit class ScoreClockPicker: UIPickerView { //PickerView let timerMinutesArray = Array(00...20) let timerSecondsArray = Array(00...59) let periodArray = ["1st", "2nd", "3rd", "OT", "SO"] //Picker return values var numberOfRowsInComponentReturnValue = 0 var titleForRowReturnValue = "" var widthForComponentReturnValue = "" required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) self.delegate = self self.dataSource = self } func resetPicker() { print("resetPicker") self.selectRow(0, inComponent: 0, animated: true) self.selectRow(0, inComponent: 1, animated: true) self.selectRow(0, inComponent: 3, animated: true) } } extension ScoreClockPicker: UIPickerViewDataSource { func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if component == 0 { numberOfRowsInComponentReturnValue = periodArray.count } else if component == 1 { numberOfRowsInComponentReturnValue = timerMinutesArray.count } else if component == 2 { numberOfRowsInComponentReturnValue = 1 } else if component == 3 { numberOfRowsInComponentReturnValue = timerSecondsArray.count } return numberOfRowsInComponentReturnValue } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 4 } func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat { var componentWidth = 0 if component == 0 { componentWidth = 140 } else if component == 1 { componentWidth = 40 } else if component == 2 { componentWidth = 30 } else if component == 3 { componentWidth = 40 } return CGFloat(componentWidth) } } extension ScoreClockPicker: UIPickerViewDelegate { func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { print("didSelectRow") } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if component == 0 { titleForRowReturnValue = periodArray[row] } else if component == 1 { titleForRowReturnValue = String(describing: timerMinutesArray[row]) } else if component == 2 { titleForRowReturnValue = ":" } else if component == 3 { titleForRowReturnValue = String(format: "%02d",timerSecondsArray[row]) } return titleForRowReturnValue } } 的viewController中无效:

ScoreClockPicker

1 个答案:

答案 0 :(得分:1)

从您的代码中,您尚未初始化您尝试在按钮操作中使用的picker对象。因此,在使用它之前,只需初始化picker

如果您正在制作ScoreClockPicker的出口

@IBOutlet var picker: ScoreClockPicker!

或者您可以在picker

中初始化viewDidLoad
self.picker = ScoreClockPicker()