Search code examples
iosuiactionsheet

UIActionSheet mixed up with previous values


I'm using UIActionSheet to be called from different UITextview. Once as date picker and as list of values.

The second time is called values will mixed up with previous values.

Could someone please help with this issue.

- (void)viewDidLoad
{
  pickerViewPopup = [[UIActionSheet alloc] initWithTitle:nil
                                              delegate:self
                                     cancelButtonTitle:nil
                                destructiveButtonTitle:nil
                                     otherButtonTitles:nil];
pickerView = [[UIDatePicker alloc] initWithFrame: CGRectMake(0, 44, 320, 266)];
catPickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 44, 320, 266)];

[super viewDidLoad];
}

#pragma mark -
#pragma mark - TextField Delegate

- (void)textFieldDidBeginEditing:(UITextField *)aTextField{
[aTextField resignFirstResponder];

switch (aTextField.tag) {
    case 1:
        [self ShowDatePick];
        break;

    case 3:
        [self ShowCategoryPick];
        break;
    default:
        break;
}
}

 -(void) ShowDatePick{
pickerView.datePickerMode = UIDatePickerModeDate;
//pickerView.hidden = NO;
pickerView.date = [NSDate date];
[pickerView addTarget:self action:@selector(updateTextField:)      forControlEvents:UIControlEventValueChanged];
[_txtDate setInputView:pickerView];

UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
pickerToolbar.barStyle = UIBarStyleDefault;
[pickerToolbar sizeToFit];

NSMutableArray *barItems = [[NSMutableArray alloc] init];

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[barItems addObject:space];

UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)];
[barItems addObject:cancelBtn];

[pickerToolbar setItems:barItems animated:YES];

[pickerViewPopup addSubview:pickerToolbar];
[pickerViewPopup addSubview:pickerView];
//[self.view addSubview:pickerViewPopup];
[pickerViewPopup showInView:self.view];
[pickerViewPopup setBounds:CGRectMake(0,0,320, 464)];
}

-(void) ShowCategoryPick{
pickerArray = [[NSArray alloc]initWithObjects:@"Chess",
               @"Cricket",@"Football",@"Tennis",@"Volleyball", nil];

catPickerView.dataSource = self;
catPickerView.delegate = self;

UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
pickerToolbar.barStyle = UIBarStyleDefault;
[pickerToolbar sizeToFit];

NSMutableArray *barItems = [[NSMutableArray alloc] init];

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[barItems addObject:space];

UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)];
[barItems addObject:cancelBtn];

[pickerToolbar setItems:barItems animated:YES];

[pickerViewPopup addSubview:pickerToolbar];
[pickerViewPopup addSubview:catPickerView];
[pickerViewPopup showInView:self.view];
[pickerViewPopup setBounds:CGRectMake(0,0,320, 464)];
}

Mixed up UIActionSheet


Solution

  • You need remove previously added subview from your pickerViewPopup before adding new one:

    ...
    [catPickerView removeFromSuperView];
    [pickerViewPopup addSubview:pickerView];
    ...
    

    and

    ...
    [pickerView removeFromSuperView];
    [pickerViewPopup addSubview:catPickerView];
    ...