Iphone UIpickerview组件在不同的UIView中,如何访问?

Iphone UIpickerview组件在不同的UIView中,如何访问?,iphone,objective-c,xcode,uipickerview,Iphone,Objective C,Xcode,Uipickerview,如何从不同UIView(不使用界面生成器)中的UIpickerview组件访问(获取用户选择) 谢谢 这是我的密码: UIView *myView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 100, 100, 100)]; UIView *myView2 = [[UIView alloc] initWithFrame:CGRectMake(20, 250, 100, 100)]; [myView1 setBackgroundColor:[UI

如何从不同UIView(不使用界面生成器)中的UIpickerview组件访问(获取用户选择)

谢谢

这是我的密码:

UIView *myView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 100, 100, 100)];
UIView *myView2 = [[UIView alloc] initWithFrame:CGRectMake(20, 250, 100, 100)];

[myView1 setBackgroundColor:[UIColor blueColor]];
[myView2 setBackgroundColor:[UIColor redColor]];

[self.view addSubview:myView1];
[self.view addSubview:myView2];

UIPickerView *pickerView1 = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)];
pickerView1.delegate = self;
pickerView1.showsSelectionIndicator = YES;
[myView1 addSubview:pickerView1];

UIPickerView *pickerView2 = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)];
pickerView2.delegate = self;
pickerView2.showsSelectionIndicator = YES;
[myView2 addSubview:pickerView2];
我有此回调,但一旦我将pickerView放入多个UIView,它就会失败:

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSLog(@"Selected Color: %@. Index of selected color: %i", [arrayColors objectAtIndex:row], row); 
} 
这就是问题所在(但不知道解决方法):


[self.view addSubview:pickerView1]// @jdl您需要阅读UIPickerView的delgate方法。以及委托协议。

您可以在UIPickerViewDeleteGate协议中使用委托方法pickerView:didSelectRow:Incomonent:,并使用标记来标识选取者

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

 }
分配标记:

pickerView1.tag = 1;
pickerView2.tag = 2;
在委托方法中:

- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

if(thePickerView.tag == 1 ){
//do this
}

else if (thePickerView.tag == 2){
//do this 
}

}

由于两个PickerView具有相同的委托,因此需要在委托方法中区分它们。一种方法是使用tag属性

设置每个选择器视图的标记属性。然后在UIPickerView委托方法
pickerView:didSelectRow:Uncomponent:
中,查询标记并相应地响应

#define kVIEW1_PICKERVIEW_TAG 123
#define kVIEW2_PICKERVIEW_TAG 456

UIView *myView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 100, 100, 100)];
UIView *myView2 = [[UIView alloc] initWithFrame:CGRectMake(20, 250, 100, 100)];

[myView1 setBackgroundColor:[UIColor blueColor]];
[myView2 setBackgroundColor:[UIColor redColor]];

[self.view addSubview:myView1];
[self.view addSubview:myView2];

UIPickerView *pickerView1 = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)];
pickerView1.delegate = self;
pickerView1.tag = kVIEW1_PICKERVIEW_TAG;
pickerView1.showsSelectionIndicator = YES;
[myView1 addSubview:pickerView1];

UIPickerView *pickerView2 = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)];
pickerView2.delegate = self;
pickerView2.tag = kVIEW2_PICKERVIEW_TAG;
pickerView2.showsSelectionIndicator = YES;
[myView2 addSubview:pickerView2];
-


@Legolas是实例变量的缩写。@Legolas,刻度盘上充满了数字,但我无法旋转它。。。无[self.view addSubview:pickerView1]//
#define kVIEW1_PICKERVIEW_TAG 123
#define kVIEW2_PICKERVIEW_TAG 456

UIView *myView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 100, 100, 100)];
UIView *myView2 = [[UIView alloc] initWithFrame:CGRectMake(20, 250, 100, 100)];

[myView1 setBackgroundColor:[UIColor blueColor]];
[myView2 setBackgroundColor:[UIColor redColor]];

[self.view addSubview:myView1];
[self.view addSubview:myView2];

UIPickerView *pickerView1 = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)];
pickerView1.delegate = self;
pickerView1.tag = kVIEW1_PICKERVIEW_TAG;
pickerView1.showsSelectionIndicator = YES;
[myView1 addSubview:pickerView1];

UIPickerView *pickerView2 = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100.0, 100.0)];
pickerView2.delegate = self;
pickerView2.tag = kVIEW2_PICKERVIEW_TAG;
pickerView2.showsSelectionIndicator = YES;
[myView2 addSubview:pickerView2];
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

switch( pickerView.tag ) {
    case kVIEW1_PICKERVIEW_TAG:
       /* code */
        break;
    case kVIEW2_PICKERVIEW_TAG:
        /* code */
        break;
    default:
        break;
    }

}