J'ai créé une vue personnalisée contenant un UIPickerView
et un UITableViewCell
pour afficher le contenu actuellement sélectionné dans le sélecteur. Mon PickerViewController
est défini à la fois comme delegate
et dataSource
du sélecteur, et je l'ai mis en œuvre numberOfComponentsInPickerView:
, pickerView: numberOfRowsInComponent:
et pickerView: titleForRow: forComponent:
, mais le sélecteur apparaît vide lorsque le programme est exécuté, et grâce à la mise NSLog
appels dans les méthodes, je l'ai découvert que les méthodes ne sont jamais appelées. Je n'ai aucune idée de ce que le problème est, car le sélecteur semble être lié correctement avec le PickerViewController
.Méthodes UIPickerViewDelegate non appelées
Pour la fonctionnalité de base que j'essaie d'atteindre, consultez la vue «Démarrer & End» dans l'application iOS Calendar. J'essaie d'imiter cela exactement, mais en utilisant seulement un UITableViewCell
au lieu de trois.
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";
}
}
Picker Voir Méthodes Source des données
- (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;
}
Picker Voir délégué Méthodes
- (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;
}