Ios 如何在同一类中为不同的选取者使用viewForRow和titleForRow?

Ios 如何在同一类中为不同的选取者使用viewForRow和titleForRow?,ios,cocoa-touch,uipickerview,Ios,Cocoa Touch,Uipickerview,我的视图上有3个选择器,其中一个仅包含图像 所以,对于这一个,我必须使用viewForRow,但是对于另外两个,它们是带有标签的常见选择器,我需要titleForRow,除非我使用viewForRow,titleForRow永远不会被调用 我怎样才能让两个代表都参加我的课堂 这就是我所拥有的: - (UIView *)pickerView:(UIPickerView *)thePickerView viewForRow:(NSInteger)row forComponent:(NSInteger

我的视图上有3个选择器,其中一个仅包含图像

所以,对于这一个,我必须使用viewForRow,但是对于另外两个,它们是带有标签的常见选择器,我需要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];
    }
}

您不能在同一个委托中同时拥有这两个。解决方案是只实现
viewForRow:
并为文本列返回UILabel对象。将
label.text
设置为您在
textForRow:
中返回的字符串,为每个选择器创建了不同的类,每个类都包含自己的代理。 然后简单地将它们导入到我的mainController类中,并在viewDidLoad方法中初始化它们

这是我使用的解决方案

=====================================找到了解决方案(解决方法):===========================

首先,我为我的3个选择器创建了3个不同的类,每个类都有一个不同的.xib。将这3个选择器添加到我的主控制器类中:

//不要忘记#导入“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设置了单独的代理,允许我根据需要对其进行设置


附言:重要的是,为了定位问题,在你的pickerViews xib上,你要将它们集中在视图上。如果您不这样做,当您尝试定位它们时,例如->CGRectMake(215,43…)将不会处于真实(215,43…)位置。我知道,这没有任何意义,但这是一个可怕的错误,让你不得不把它放在试验中。更改value-run-Change-run,直到正确为止。

我知道,但我不想这样做的原因是,当返回标签时,当在选择器中选择标签时,会出现蓝色矩形。但是我在不同的类中创建了选择器,以拥有它们自己的委托。刚刚将它们导入主控制器。:)