我的视图中有3个选择器,其中一个仅包含图像。
所以,对于这个,我必须使用viewForRow,但对于其他2,这是带标签的常见选择器,我需要titleForRow,除非我使用viewForRow,titleForRow永远不会被调用。
我怎样才能在班上打电话给两位代表?
这就是我所拥有的:
- (UIView *)pickerView:(UIPickerView *)thePickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
[[[objectPicker subviews] objectAtIndex:0] setHidden:YES];
[[[objectPicker subviews] objectAtIndex:5] setHidden:YES];
[[[objectPicker subviews] objectAtIndex:8] setHidden:YES];
return ; //will be implemented, but this will return the icons
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
[[[objectPicker subviews] objectAtIndex:0] setHidden:YES];
[[[objectPicker subviews] objectAtIndex:5] setHidden:YES];
[[[objectPicker subviews] objectAtIndex:8] setHidden:YES];
if (pickerView == self.timePicker) {
return [timeList objectAtIndex:row];
}
else if(pickerView == self.powerPicker) {
return [powerList objectAtIndex:row];
}
}
答案 0 :(得分:4)
你根本不能同时拥有两个代表。解决方案是仅实现viewForRow:
并返回文本列的UILabel对象。将label.text
设置为您在textForRow:
中返回的字符串。
答案 1 :(得分:2)
为每个选择器创建不同的类,每个选择器包含自己的委托。 然后将它们简单地导入到我的mainController类中,并在viewDidLoad方法中初始化它们。
这是我用过的解决方案
===========================找到解决方案(解决方法):============= ==============
首先,我为3个采摘者创建了3个不同的类,每个类都有不同的.xib。将这3个选择器添加到我的主控制器类中:
//不要忘记#import“YourClass.h”并在主控制器的.h文件中实例化它
objPickerVC = [[ObjectPickerViewController alloc] initWithNibName:@"ObjectPickerViewController" bundle:[NSBundle mainBundle]];
powerPickerVC = [[PowerPickerViewController alloc] initWithNibName:@"PowerPickerViewController" bundle:[NSBundle mainBundle]];
timePickerVC = [[TimePickerViewController alloc] initWithNibName:@"TimePickerViewController" bundle:[NSBundle mainBundle]];
CGRect rect1 = CGRectMake(5, 43, 100, 216);
objPickerVC.view.frame = rect1;
[self.view addSubview:objPickerVC.view];
CGRect rect2 = CGRectMake(110, 43, 100, 216);
powerPickerVC.view.frame = rect2;
[self.view addSubview:powerPickerVC.view];
CGRect rect3 = CGRectMake(215, 43, 100, 216);
timePickerVC.view.frame = rect3;
[self.view addSubview:timePickerVC.view];
通过这样做,我为每个pickerView提供了单独的委托,允许我设置它们,但我需要它们。
P.S:重要的是,对于定位问题,在pickerViews xib上,你将它们集中在视图上。如果你不这样做,当你试图定位它们时 - >例如,CGRectMake(215,43 ......)将不在REAL(215,43 ......)位置。我知道,它没有任何意义,但它是一个可怕的错误,并且你必须将它定位在试验中。改变价值 - 运行 - 改变 - 运行,直到你做对了。