Цель C, как удалить элементы из массива на основе других элементов массива - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть три UIPickerviews. У меня есть json ответ. У меня есть три текстовых поля. Если пользователь выбирает первый вид выбора, соответствующие данные отображаются в первых текстовых полях. И второй и третий вид сборщика также одинаковы. Мое требование: если пользователь выбирает конкретный элемент в первом окне выбора, во втором и третьем окне выбора элемент не отображается. И второе и третье тоже одно и то же.

-(void)viewDidLoad
{
    dataArray = [[NSMutableArray alloc]initWithObjects:@"A+",@"A-",@"B+",@"B-",@"O+",@"O-", nil];

    bloodGroup = [[UITextField alloc]initWithFrame:CGRectMake(10, logoImg.frame.origin.y+logoImg.frame.size.height+45, screenWidth-20, 50)];

    bloodGroup.borderStyle = UITextBorderStyleRoundedRect;
    bloodGroup.font = [UIFont systemFontOfSize:15];
    bloodGroup.placeholder = @"Please Select Your Option";
    bloodGroup.delegate = self;

    [self.view addSubview:bloodGroup];

    txtField1 = [[UITextField alloc]initWithFrame:CGRectMake(10, ansField1.frame.origin.y+ansField1.frame.size.height+45, screenWidth-20, 50)];
    txtField1.borderStyle = UITextBorderStyleRoundedRect;
    txtField1.font = [UIFont systemFontOfSize:15];
    txtField1.placeholder = @"Please Select Your Option";
    txtField1.delegate = self;

    [self.view addSubview:txtField1];

    txtField2 = [[UITextField alloc]initWithFrame:CGRectMake(10, ansField2.frame.origin.y+ansField2.frame.size.height+45, screenWidth-20, 50)];
    txtField2.borderStyle = UITextBorderStyleRoundedRect;
    txtField2.font = [UIFont systemFontOfSize:15];
    txtField2.placeholder = @"Please Select Your Option";
    txtField2.delegate = self;

    [self.view addSubview:txtField2];

    myPickerView = [[UIPickerView alloc] init];
    [myPickerView setDataSource: self];
    [myPickerView setDelegate: self];
    myPickerView.showsSelectionIndicator = YES;

    bloodGroup.inputView = myPickerView;
    bloodGroup.inputAccessoryView = toolBar;

    // txtField1

    txtField1.inputView = myPickerView;
    txtField1.inputAccessoryView = toolBar;

    txtField2.inputView = myPickerView;
    txtField2.inputAccessoryView = toolBar;
}

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

    if (isBloodGroupFieldSelected) {
        return 1;
    }
    else if(!isBloodGroupFieldSelected){
        return 1;
    }
    else if(!isGenderGroupFieldSelected)
    {
        return 1;
    }
    return 0;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{

    if (isBloodGroupFieldSelected) {
        return [dataArray count];
    }
    else if(!isBloodGroupFieldSelected)
    {
        return [dataArray count];
    }
    else if (!isGenderGroupFieldSelected)
    {
        return [dataArray count];
    }
    return 0;
}

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

  if (isBloodGroupFieldSelected)
    {
        return dataArray[row];
    }
    else if((!isBloodGroupFieldSelected) && (isGenderGroupFieldSelected))
    {
        return dataArray[row];
    }
    else if(!isGenderGroupFieldSelected)
    {
        return dataArray[row];
    }
    return 0;
}

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

    if (isBloodGroupFieldSelected) {
        bloodGroup.text = dataArray[row];
    }
    else if((!isBloodGroupFieldSelected) && (isGenderGroupFieldSelected))
    {
        txtField1.text = dataArray[row];
    }
    else if(!isGenderGroupFieldSelected)
    {
        txtField2.text= dataArray[row];
    }
}

- (void)textFieldDidBeginEditing:(UITextField *)textField {

    if (textField == bloodGroup) {
        isBloodGroupFieldSelected = YES;
    }
    else if (textField == txtField1){
        isBloodGroupFieldSelected = NO;
        isGenderGroupFieldSelected = YES;
    }
    else if (textField == txtField2) {
        isGenderGroupFieldSelected = NO;
        isBloodGroupFieldSelected = NO;
    }
    [myPickerView reloadAllComponents];
}

1 Ответ

0 голосов
/ 24 апреля 2020

У вас уже есть большая часть кода, который вам нужен. Метод делегата pickerView:didSelectRow:inComponent: будет вызван, когда любой из ваших сборщиков был изменен, при условии, что у каждого из них свои делегаты установлены на контроллере выше. Хотя я вижу только один вид выбора, определенный в приведенном выше коде. Предположим, что ваши представления выбора называются myPickerView, myPickerView2 и myPickerView3. Код будет примерно:

- (void)pickerView:(UIPickerView *)pickerView
      didSelectRow:(NSInteger)row
       inComponent:(NSInteger)component
{
    if (pickerView == pickerView1) {
        // the first picker view lseection has changed
        // update myPickerView2 and myPickerView3 to reflect
        // the values you want based on this selection
    } else if (pickerView == pickerView2) {
        // update the other views based on this selection
    } else ...

    ....

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...