iOS замените клавиатуру на UIPickerView, затем вернитесь к клавиатуре

В моем приложении есть текстовое поле, в котором пользователь может выбрать группу, к которой он принадлежит, а также несколько других полей. Когда они добираются до текстового поля группы, появляется UIPickerView, в котором есть несколько вариантов, которые уже были созданы, а также опция «Создать новую группу». Когда выбран этот вариант, я хочу, чтобы UIPickerView исчез, а клавиатура снова всплывала, чтобы они могли снова печатать. Я могу заставить окно выбора появиться и исчезнуть, но не могу вернуть клавиатуру. Вот пока что код.

-(void)addPickerView{

     __block NSMutableArray *arr = [[NSMutableArray alloc] init];

    PFQuery *rejectedNumber = [PFQuery queryWithClassName:@"Group"];
    [rejectedNumber orderByAscending:@"GroupName"];
    [rejectedNumber findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {



        if (!objects) {
            // Did not find any UserStats for the current user

            NSLog(@"NotFound");
        } else {
            pickerArray = objects;
            [myPickerView reloadAllComponents];

        }
    }];

     //pickerArray = GoGo;
    self.theView.signUpView.additionalField.delegate = self;
    [self.theView.signUpView.additionalField setPlaceholder:@"Choose Group"];
    myPickerView = [[UIPickerView alloc]init];
    myPickerView.dataSource = self;
    myPickerView.delegate = self;
    myPickerView.showsSelectionIndicator = YES;
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Done" style:UIBarButtonItemStyleDone
                                   target:self action:@selector(finishIt)];
    UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:
                          CGRectMake(0, self.view.frame.size.height-
                                     self.theView.signUpView.additionalField.frame.size.height-50, 320, 50)];
    [toolBar setBarStyle:UIBarStyleBlackOpaque];
    NSArray *toolbarItems = [NSArray arrayWithObjects:
                             doneButton, nil];
    [toolBar setItems:toolbarItems];
    self.theView.signUpView.additionalField.inputView = myPickerView;
    self.theView.signUpView.additionalField.inputAccessoryView = toolBar;

}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component{
    return [pickerArray count] + 1;
}

#pragma mark- Picker View Delegate

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:
(NSInteger)row inComponent:(NSInteger)component{
    if (row == 0)
        [self.theView.signUpView.additionalField.inputView removeFromSuperview];
        [self.theView.signUpView.additionalField becomeFirstResponder];

    }
    else {

    [self.theView.signUpView.additionalField setText:self.theGroup];
    }
}
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    NSString *groupName  = @"Create New Group";
    if (row != 0)
    {
        PFObject *object = pickerArray[row - 1]; // -1 to handle the array index
        self.theGroup    = object[@"GroupName"];
        groupName        = object[@"GroupName"];
    }
    return groupName;
}

person user717452    schedule 26.10.2016    source источник


Ответы (1)


Первое, что я заметил, это то, что вы пропустили фигурные скобки здесь после условия if:

if (row == 0)
    [self.theView.signUpView.additionalField.inputView removeFromSuperview];
    [self.theView.signUpView.additionalField becomeFirstResponder];

}

Вместо этого используйте это:

if (row == 0) {
    [self.theView.signUpView.additionalField resignFirstResponder];
    self.theView.signUpView.additionalField.inputView = nil;
    [self.theView.signUpView.additionalField becomeFirstResponder];
}
person Annie Gupta    schedule 26.10.2016
comment
Спасибо, работает. Знак {был в моем коде, я просто случайно удалил его, когда писал ранее. Как я могу изменить его так, чтобы PickerView начинался выделенным в пустой строке? Прямо сейчас первая строка - «Создать новую группу», и вам нужно уйти, а затем снова вернуться, чтобы выбрать ее. Мысли? - person user717452; 26.10.2016