在不同的操作表中使用许多选择器视图?

时间:2011-12-27 14:34:33

标签: iphone ios xcode uipickerview

在我的应用中,我在动作表中使用了4个选择器视图,其中我如何从特定选择器中获取特定值? 在其中我使用了一种方法来获得它。但是我需要一种更好的方法来获得它。,PLZ帮助我。,

-(NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
    NSLog(@"pickerView");
    return [pickerArray count];
}

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return [pickerArray objectAtIndex:row];
}

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

    if (validateButton == 0){

        NSInteger temp = (row*5);
        minAsleepInt = temp;
        minAsleepLable.text = [NSString stringWithFormat:@"%d",temp];
    }
    else if(validateButton == 1){

        noOptInt = row+1;
        noOptLable.text = [pickerArray objectAtIndex:row];
    }
    else if(validateButton == 2){

        ageTypeLable.text = [pickerArray objectAtIndex:row];
    }
    else if(validateButton == 3){

        if([pickerArray objectAtIndex:row] == @"Yes"){
            sleepLessBool = YES;
        }else{
            sleepLessBool = NO;
        }
         sleepLessLable.text = [pickerArray objectAtIndex:row];
    }

}


- (IBAction)sleepLessAction:(id)sender {

    validateButton = 3;

    pickerArray = [[NSMutableArray alloc] init];
    [pickerArray addObject:@"Yes"];
    [pickerArray addObject:@"No"];


    actionSheet = [[UIActionSheet alloc] initWithTitle:nil 
                                                             delegate:self
                                                    cancelButtonTitle:nil
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:nil];

    [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];

    CGRect pickerFrame = CGRectMake(0, 40, 0, 0);

    pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];
    pickerView.showsSelectionIndicator = YES;
    pickerView.delegate = self;

    [actionSheet addSubview:pickerView];

    UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Close"]];
    closeButton.momentary = YES; 
    closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f);
    closeButton.segmentedControlStyle = UISegmentedControlStyleBar;
    closeButton.tintColor = [UIColor blackColor];
    [closeButton addTarget:self action:@selector(dismissActionSheet) forControlEvents:UIControlEventValueChanged];
    [actionSheet addSubview:closeButton];

    [actionSheet showInView:[[UIApplication sharedApplication] keyWindow]];

    [actionSheet setBounds:CGRectMake(0, 0, 320, 485)];


}

- (IBAction)ageTypeAction:(id)sender {
     validateButton = 2;

    pickerArray = [[NSMutableArray alloc] init];
    [pickerArray addObject:@"Child"];
    [pickerArray addObject:@"Teen"];
    [pickerArray addObject:@"Adult"];

    actionSheet = [[UIActionSheet alloc] initWithTitle:nil 
                                              delegate:nil
                                     cancelButtonTitle:nil
                                destructiveButtonTitle:nil
                                     otherButtonTitles:nil];

    [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];

    CGRect pickerFrame = CGRectMake(0, 40, 0, 0);

    pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];
    pickerView.showsSelectionIndicator = YES;
    pickerView.delegate = self;

    [actionSheet addSubview:pickerView];


    UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Close"]];
    closeButton.momentary = YES; 
    closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f);
    closeButton.segmentedControlStyle = UISegmentedControlStyleBar;
    closeButton.tintColor = [UIColor blackColor];
    [closeButton addTarget:self action:@selector(dismissActionSheet) forControlEvents:UIControlEventValueChanged];
    [actionSheet addSubview:closeButton];

    [actionSheet showInView:[[UIApplication sharedApplication] keyWindow]];

    [actionSheet setBounds:CGRectMake(0, 0, 320, 485)];
}

- (IBAction)noOptAction:(id)sender {

     validateButton = 1;
    pickerArray = [[NSMutableArray alloc] init];

    [pickerArray addObject:@"1"];
    [pickerArray addObject:@"2"];
    [pickerArray addObject:@"3"];
    [pickerArray addObject:@"4"];
    [pickerArray addObject:@"5"];
    [pickerArray addObject:@"6"];
    [pickerArray addObject:@"7"];
    [pickerArray addObject:@"8"];    
    [pickerArray addObject:@"9"];

    actionSheet = [[UIActionSheet alloc] initWithTitle:nil 
                                              delegate:nil
                                     cancelButtonTitle:nil
                                destructiveButtonTitle:nil
                                     otherButtonTitles:nil];

    [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];

    CGRect pickerFrame = CGRectMake(0, 40, 0, 0);

    pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];
    pickerView.showsSelectionIndicator = YES;
    pickerView.delegate = self;


    [actionSheet addSubview:pickerView];


    UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Close"]];
    closeButton.momentary = YES; 
    closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f);
    closeButton.segmentedControlStyle = UISegmentedControlStyleBar;
    closeButton.tintColor = [UIColor blackColor];
    [closeButton addTarget:self action:@selector(dismissActionSheet) forControlEvents:UIControlEventValueChanged];
    [actionSheet addSubview:closeButton];

    [actionSheet showInView:[[UIApplication sharedApplication] keyWindow]];

    [actionSheet setBounds:CGRectMake(0, 0, 320, 485)];

}

- (IBAction)minSleepAction:(id)sender {

         validateButton = 0;

    pickerArray = [[NSMutableArray alloc] init];
    [pickerArray addObject:@"0 Minutes"];
    [pickerArray addObject:@"5 Minutes"];
    [pickerArray addObject:@"10 Minutes"];
    [pickerArray addObject:@"15 Minutes"];
    [pickerArray addObject:@"20 Minutes"];
    [pickerArray addObject:@"25 Minutes"];
    [pickerArray addObject:@"30 Minutes"];
    [pickerArray addObject:@"35 Minutes"];
    [pickerArray addObject:@"40 Minutes"];
    [pickerArray addObject:@"45 Minutes"];
    [pickerArray addObject:@"50 Minutes"];
    [pickerArray addObject:@"55 Minutes"];
    [pickerArray addObject:@"60 Minutes"];

    actionSheet = [[UIActionSheet alloc] initWithTitle:nil 
                                              delegate:nil
                                     cancelButtonTitle:nil
                                destructiveButtonTitle:nil
                                     otherButtonTitles:nil];

    [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];

    CGRect pickerFrame = CGRectMake(0, 40, 0, 0);

    pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame];
    pickerView.showsSelectionIndicator = YES;
    pickerView.delegate = self;


    [actionSheet addSubview:pickerView];


    UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Close"]];
    closeButton.momentary = YES; 
    closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f);
    closeButton.segmentedControlStyle = UISegmentedControlStyleBar;
    closeButton.tintColor = [UIColor blackColor];
    [closeButton addTarget:self action:@selector(dismissActionSheet) forControlEvents:UIControlEventValueChanged];
    [actionSheet addSubview:closeButton];

    [actionSheet showInView:[[UIApplication sharedApplication] keyWindow]];

    [actionSheet setBounds:CGRectMake(0, 0, 320, 485)];
}


-(void)dismissActionSheet{
    [actionSheet dismissWithClickedButtonIndex:0 animated:YES];

}

@end

2 个答案:

答案 0 :(得分:0)

您可以为每个选择器设置标记。并使用TAG值从特定选择器获取特定值。

答案 1 :(得分:0)

正如您所做的那样,您需要设置以下委托方法:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return PICKER_COMPONENTS;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    return [self.pickerOptions count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    return [self.pickerOptions objectAtIndex:row];
}

现在,就响应每个选择器的选择而言,我建议使用EAActionSheetPicker。它具有以下可选的委托方法,使生活更轻松

-(void)EAActionSheetPicker:(EAActionSheetPicker *)actionSheet
   didDismissWithSelection:(id)selection
               inTextField:(UITextField *)textField{
    // respond to your selection here
}

你只需要通过连接每个pickerView并使用相关的响应textField来设置它。查看仓库中的示例项目,看看我在说什么。