2015-09-15 15 views
6

Ho un controller di visualizzazione CaptureDataVC e una vista personalizzata KeyboardView.I metodi della vista personalizzata di iOS non sono denominati

KeyboardView ha tutte le funzioni di init necessari per lavorare in base alle esigenze:
-(id)initWithCoder:(NSCoder *)aDecoder e -(id)initWithFrame:(CGRect)frame

Nel file di xib CaptureDataVC s' Ho un UIView con classe personalizzata KeyboardView.

La visualizzazione viene visualizzata correttamente. Il problema è che non posso chiamare nessuno dei metodi in KeyboardView (Compilano e non ottengo alcun errore ma i metodi non vengono chiamati).

Quindi, in pratica, non posso fare questo:

CaptureDataVC.h

@property (nonatomic,retain) IBOutlet KeyboardView *keyboardView; 

CaptureDataVC.m

[self.keyboardView foo]; 

KeyboardView.m

-(void) foo { 
    NSLog(@"Hello World!"); //Won't print anyting 
} 

Qualche idea?

Edit:

enter image description here

La classe personalizzata è impostata alla vista blu

+0

Puoi postare una schermata del file xib quando è selezionato 'KeyboardView' e Identity Inspector è aperto? La classe dice 'KeyboardView'? – HAS

+0

@HAS come puoi vedere ... – Moucheg

+0

Hai l'IBOutlet allegato nello storyboard? Inoltre dovrebbe essere debole non conservare. – BooRanger

risposta

7

Bene, le prime domande sono:

  1. viene eseguita la linea [self.keyboardView foo];? Metti un punto di interruzione lì.
  2. Se sì, è self.keyboardView non è nulla? Quando il debugger si è arrestato sul punto di interruzione precedente, digitare po self.keyboardView nel debugger per verificare.

Un errore classico è quello di assumere che self.someView sia sempre impostato. In realtà non lo sarà, prima che la vista e le prese siano state caricate. Vedere le documentazioni di viewDidLoad e isViewLoaded.

+0

Sono solo un ritardato ... l'avevo capito prima della tua risposta, ma grazie! – Moucheg

+1

Cercavo di richiamare quei metodi dal mehtod iniziale di 'CaptureDataVC' ... li ho spostati in' viewDidLoad' e voilà ... – Moucheg

+0

Probabilmente segnerà questa risposta come risolta, sembra che la soluzione sia qui –

5

Si prega di verificare se l'installazione KeyboardView`s presa proprietà: se la proprietà è pari a zero, non succederà nulla

1

In CaptureDataVC.m è necessario allocare la memoria di opporsi come:

self.keyboardView=[[KeyboardView alloc]init]; 

e chiamare il metodo :

[self.keyboardView foo]; 

funzionerà.

+1

Grazie per aver risposto, ma quello che stavo facendo era sbagliato: stavo cercando di accedere alla vista prima che venisse caricata (nel metodo init). Ho solo bisogno di spostare il mio codice nel metodo viewDidLoad – Moucheg

+0

Che bello sentire !! :) perfct –

1

è possibile ottenere il risultato desiderato utilizzando i delegati.implementare i delegati della vista tastiera nel viewcontroller.

2

Non è necessario inizializzare la visualizzazione personalizzata manualmente come aggiunta nel controller di visualizzazione. Tutto quello che devi fare è controllare dove hai chiamato il tuo metodo di visualizzazione personalizzato. Dovrebbe essere chiamato dopo aver caricato la vista. i.e viewDidLoad o viewWillAppear method.

Problemi correlati