Методы UIPickerViewDelegate, не вызываемые

Я создал собственное представление, которое содержит UIPickerView и UITableViewCell для отображения содержимого, выбранного в данный момент в окне выбора. мой PickerViewController устанавливается как delegate а также dataSource сборщика, и я реализовал numberOfComponentsInPickerView:, pickerView: numberOfRowsInComponent:, а также pickerView: titleForRow: forComponent:, но средство выбора отображается пустым при запуске программы, и благодаря размещению NSLog вызовы в методах, я обнаружил, что методы никогда не вызывают. Я понятия не имею, в чем проблема, так как сборщик, кажется, правильно связан с PickerViewController,

Основные функции, которых я пытаюсь достичь, см. В представлении "Начало и конец" в приложении "Календарь iOS". Я пытаюсь подражать этому точно, но только с помощью одного UITableViewCell вместо трех.

PickerViewController.h

#import <UIKit/UIKit.h>

@interface PickerViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITableViewCell *pickerSelection;
// Property to dynamically determine what content to display in the picker.
@property (nonatomic) BOOL userIsChoosingClass;

@end

viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(self.thePicker.delegate.description);
    if (self.userIsChoosingClass) {
        self.pickerSelection.textLabel.text = @"Class";
    } else {
        self.pickerSelection.textLabel.text = @"Major";
    }
}

Выбор источника данных Методы просмотра

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component {
    size_t numberOfRows = 0;

    if (self.userIsChoosingClass) {
        numberOfRows = [self.brain classChoicesForSignUp].count;
    } else {
        numberOfRows = [self.brain majorChoicesForSignUp].count;
    }

    return numberOfRows;
}

Выбор метода просмотра делегата

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row
            forComponent:(NSInteger)component {
    NSLog(@"Picker view delegate method called");
    NSString *title;

    if (self.userIsChoosingClass) {
        title = [[self.brain classChoicesForSignUp] objectAtIndex:row];
    } else {
        title = [self.majorChoices objectAtIndex:row];
    }

    return title;
}

1 ответ

Решение

Если ваш метод источника данных numberOfRows... возвращает 0, то ваш метод делегата никогда не будет вызван - средство выбора не будет запрашивать заголовок строки, если не считает, что у нее есть какие-либо строки для отображения.

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