0

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; 
} 

Répondre

1

Si votre numberOfRows ... méthode DataSource est de retour 0, votre méthode déléguée ne sera jamais appelé - le sélecteur ne demandera pas le titre d'une ligne si elle doesn Je ne pense pas qu'il y ait de lignes à afficher.

Questions connexes