2013-08-29 4 views
3

Je suis en train de trébucher sur ce que je crois être probablement une incompréhension fondamentale du fonctionnement des classes en Objective-C. J'utilise Storyboards mais dans cette application, je voulais créer une simple vue de sélecteur de date personnalisé pour un champ de texte sur un de mes contrôleurs de vue. Cependant, il me semble avoir un problème accès à l'une des propriétés du contrôleur classe sélecteur de date de ma vue:Utilisation du storyboard et xib dans le même projet

D'abord, je modélise mon CustomDatePicker.xib en IB comme suit:

enter image description here

I ont créé une classe personnalisée par sublcassing UIView comme suit:

CustomPicker.h

@interface CustomPickerView : UIView 

@property (strong, nonatomic) IBOutlet UIDatePicker* datePicker; 

@end 

CustomerPicke R.M.

@implementation CustomPickerView 

- (id)init 
{ 
    self = [super initWithFrame:CGRectMake(0, 0, 320, 258)]; 
    if (self) { 
     [self addSubview:[[[NSBundle mainBundle] loadNibNamed:@"CustomPickerView" owner:self options:nil] objectAtIndex:0]]; 
    } 
    return self; 
} 

Dans mon ViewController:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.customPickerView=[[CustomPickerView alloc] init]; 

    // THE MAIN ISSUE IS... 
    // Following line has no effect on how picker is presented ??? 
    self.customPickerView.datePicker.datePickerMode=UIDatePickerModeTime; 

    self.dateField.inputView=self.customPickerView; 
} 

Lorsque le champ de texte est tapé, mon CustomDatePicker apparaît bien. Cependant, je n'arrive pas à définir le .datePickerMode à partir de la méthode viewDidLoad de mon ViewController. La seule façon de changer le .datePickerMode est via IB et bien sûr cela ne fonctionnera pas au moment de l'exécution.

J'ai câblé la sortie dans IB et suis en mesure d'accéder à la datePicker.date à partir de la classe, mais pas le ViewController.

J'ai étudié et consulté un certain nombre de façons de mettre en œuvre ce concept. Ma question est comment mettre en œuvre un CustomDatePicker il est « Pourquoi je ne peux pas accéder aux propriétés de mon CustomDatePicker du ViewController que instancié

Répondre

1

J'ai changé avec succès la propriété datePickerMode quand je chargé le NIB comme ceci:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSArray *nibArray = [[NSBundle mainBundle] loadNibNamed:@"CustomPickerView" owner:self options:nil]; 
    self.customPickerView = (CustomPickerView *)[nibArray objectAtIndex:0]; 
    self.customPickerView.datePicker.datePickerMode = UIDatePickerModeTime; 

    self.dateField.inputView = self.customPickerView; 
} 

Et vous pouvez probablement supprimer votre Bien qu'il puisse être possible méthode tout à fait. Je ne l'ai jamais vu un NIB chargé dans la méthode init comme vous faites de vue personnalisée init., je crois que ce qui est à l'origine de votre problème. Chargement de la NIB dans viewDidLoad de la ViewController et le réglage directement semble plus simple

+0

Merci d'avoir pris un coup d'oeil. Je vois ce que vous avez fait mais je veux vraiment garder le chargement de la plume dans le CustomPickerClass que j'ai écrit. De cette façon, lorsque j'instancie le CustomPickerClass, la plume est chargée. En outre, l'implémentation comme vous l'avez décrite provoque d'autres problèmes en ce qui concerne les méthodes locales à la classe CustomPicker, comme lorsque le bouton Terminé est enfoncé. J'ai quitté cette partie du code pour me concentrer sur ma question principale. –

Questions connexes