Ios 可以填充选择器视图,但不能从中获取数据
我在一个视图/视图控制器中有三个不同的UIPickerViews。我没有将viewController作为所有三个UIPickerViews的委托和数据源,而是为每个UIPickerViews创建了单独的子类文件,并将这些文件导入viewController。我为ViewController中的每个UIPickerViews创建了插座(从情节提要中单击并拖动)。因此,在viewController的viewDidLoad中,我将插座连接到数据源/代理。下面是一个示例,其中包含self.timePicker的出口Ios 可以填充选择器视图,但不能从中获取数据,ios,objective-c,uipickerview,Ios,Objective C,Uipickerview,我在一个视图/视图控制器中有三个不同的UIPickerViews。我没有将viewController作为所有三个UIPickerViews的委托和数据源,而是为每个UIPickerViews创建了单独的子类文件,并将这些文件导入viewController。我为ViewController中的每个UIPickerViews创建了插座(从情节提要中单击并拖动)。因此,在viewController的viewDidLoad中,我将插座连接到数据源/代理。下面是一个示例,其中包含self.timeP
self.timePicker.delegate = [self timePickerDataDelegate];
self.timePicker.dataSource = [self timePickerDataDelegate];
其中[self timePickerDataDelegate]
调用构造函数
-(TimePicker *)timePickerDataDelegate
{
if (!_timePickerDataDelegate) _timePickerDataDelegate = [[TimePicker alloc] init];
return _timePickerDataDelegate;
}
在timePicker类中,我实现了它作为委托和数据源所需的方法。事实上,当我运行应用程序时,所有三个UIPickerViews都填充了正确的数据。但是,我在从picker视图获取数据时遇到问题。由于我的UIPickerViews处于模式视图中,因此我尝试在prepareforsgue
中获取数据,当模式被取消时,将调用该数据。但是,当我这样做以获得所选的时间值时,我会得到错误
No visible interface for UIPickerView declares the selector pickerView:titleForRow:forComponent
NSString *time = [self.timePicker pickerView:self.timePicker titleForRow:[self.timePicker selectedRowInComponent:0] forComponent:0];
你能解释一下我做错了什么吗?方法
pickerView:titleForRow:forComponent:
是UIPickerViewDelegate
的方法,而不是UIPickerView
该行:
NSString *time = [self.timePicker pickerView:self.timePicker titleForRow:[self.timePicker selectedRowInComponent:0] forComponent:0];
应该是:
NSString *time = [self.timePickerDataDelegate pickerView:self.timePicker titleForRow:[self.timePicker selectedRowInComponent:0] forComponent:0];
或:
问题是方法中的第一个元素实际上应该是委托
self.timePickerDataDelegate
而其他元素则是出口
self.timePicker
这是全部的
NSString *time = [self.timePickerDataDelegate pickerView:self.timePicker titleForRow:`[self.timePicker selectedRowInComponent:0] forComponent:0];`
NSString *time = [self.timePickerDataDelegate pickerView:self.timePicker titleForRow:`[self.timePicker selectedRowInComponent:0] forComponent:0];`