Методы 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, то ваш метод делегата никогда не будет вызван - средство выбора не будет запрашивать заголовок строки, если не считает, что у нее есть какие-либо строки для отображения.