Как получить вид выбора с кнопкой "Готово" при нажатии в текстовом поле?

Я пытаюсь создать текстовое поле, которое открывает окно выбора с помощью кнопки "Готово" вместо клавиатуры. Пользователь выбирает категорию в окне выбора, и она будет заполнять текстовое поле при нажатии кнопки "Готово". Я прочитал много сообщений на эту тему и следовал этим инструкциям. но я всегда сталкиваюсь с одной и той же проблемой (см. удар).

Я создал pickerView и инициализировал его своим массивом. Я знаю, что я должен установить inputView моей textFieldCategory для моего pickerView. Когда я запускаю код, все работает нормально, пока я не нажму на текстовое поле Категория. Затем приложение падает, и я получаю следующее сообщение об ошибке:

015-03-23 ​​19:09:18.663 TestApp[903:63946] *** Завершение работы приложения из-за необработанного исключения "UIViewControllerHierarchyInconsistency", причина: "дочерний контроллер представления: должен иметь родительский контроллер представления: но запрошенный родительский объект: UIInputWindowController: 0x7f83f184d400

Кроме того, я поместил вызов метода (self.textFieldCategory.inputView = self.picker;) в нужное место? Я думаю, что сделал, но я продолжаю получать ошибку. Я прочитал несколько постов об этой конкретной ошибке и следовал инструкциям по ее устранению. но описанные случаи были немного другими и с более старыми версиями xcode.

Я даже не ищу, чтобы кто-нибудь показывал мне правильный код, но если бы кто-то мог направить меня в правильном направлении, это было бы очень ценно.

Вот что у меня есть в моем файле ViewController.m:

#import "AddNewObjectViewController.h"

@interface AddNewObjectViewController ()

{
    NSArray *_pickerData;
}

//IBAction from textFieldName
- (IBAction)editingChanged:(UITextField *)sender;

@property (weak, nonatomic) IBOutlet UITextField *textFieldName;
@property (weak, nonatomic) IBOutlet UITextField *textFieldCategory;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *saveButton;

@end

@implementation AddNewObjectViewController

- (IBAction)editingChanged:(UITextField *)textFieldName
{
    //Activate saveButton if at least one character is entered in textFieldName
    _saveButton.enabled = textFieldName.text.length > 0;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view.



    //disable saveButton
    [_saveButton setEnabled:NO];


    //Initialize Data
    _pickerData = @[@"Category 1", @"Category 2", @"Category 3", @"Category 4"];

    //Connect Data
    self.picker.dataSource = self;
    self.picker.delegate = self;

    self.textFieldCategory.inputView = self.picker;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

// The number of columns of data
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}

// The number of rows of data
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return _pickerData.count;
}

// The data to return for the row and component (column) that's being passed in
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return _pickerData[row];
}


#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if (sender != self.saveButton) return;
    if (self.textFieldObjectName.text.length > 0) {
        self.myObject = [[MyObject alloc] init];
        self.myObject.myObjectName = self.textFieldName.text;
        self.myObject.myObjectCategory = self.textFieldCategory.text;
    }
}

@end

1 ответ

Хорошо, я только что понял, почему он разбился. Я создал текстовое поле и окно выбора в раскадровке. Чтобы заставить его работать, мне пришлось удалить pickerView из superview:

[self.picker removeFromSuperview];

Я добавил этот метод в viewDidLoad, и теперь, когда я щелкаю текстовое поле, приложение больше не падает, но вызывает pickerView!

Другие вопросы по тегам