如何在同一个类中为不同的选择器使用viewForRow和titleForRow?

时间:2010-11-19 20:41:18

标签: ios cocoa-touch uipickerview

我的视图中有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];
    }
}

2 个答案:

答案 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 ......)位置。我知道,它没有任何意义,但它是一个可怕的错误,并且你必须将它定位在试验中。改变价值 - 运行 - 改变 - 运行,直到你做对了。