Sto provando a creare un controllo personalizzato che aggiorna in tempo reale in Interface Builder utilizzando la nuova opzione IB_DESIGNABLE descritta here.xcode 6 IB_DESIGNABLE- non sta caricando le risorse dal pacchetto in Interface builder
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect myFrame = self.bounds;
CGContextSetLineWidth(context, 10);
CGRectInset(myFrame, 5,5);
[[UIColor redColor] set];
UIRectFrame(myFrame);
NSBundle *bundle = [NSBundle mainBundle];
NSString *plistPath;
plistPath = [bundle pathForResource:@"fileExample" ofType:@"plist"];
UIImage *tsliderOff = [UIImage imageNamed:@"btn_slider_off.png"];
[tsliderOff drawInRect:self.bounds];
}
Quando eseguo nel simulatore, ottengo una scatola rossa con la mia immagine al centro (come previsto):
Ma quando provo utilizzare l'Interface Builder, mostra solo come una casella rossa (nessuna immagine al centro):
Quando eseguo il debug: Editor-> Debug Selected Views, rivela che qualsiasi cosa caricata dal bundle è nulla. Sia plistPath che tsliderOff appaiono come nulli.
Mi sono assicurato che btn_slider_off.png fosse incluso in Target-> myFrameWork-> Build Phases-> Copy Bundle Resources.
Qualche idea sul perché Interface Builder non veda il file PNG durante la modifica, ma mostra ok durante l'esecuzione? "Creazione di una visualizzazione personalizzata che rende in Interface Builder" è un po 'limitato, se non riesco a caricare le immagini per rendere ...
modifica sulla base di soluzione Rickster
Rickster mi ha segnalato il soluzione - il problema è che i file non vivono in mainBundle, vivono in [NSBundle bundleForClass: [self class]]; E sembra che [UIImage imageNamed: @ "btn_slider_off.png"] utilizzi automaticamente mainBundle.
Il seguente codice funziona!
#if !TARGET_INTERFACE_BUILDER
NSBundle *bundle = [NSBundle mainBundle];
#else
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
#endif
NSString *fileName = [bundle pathForResource:@"btn_slider_off" ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile:fileName];
[image drawInRect:self.bounds];
Fa questo vale ancora di Xcode 6.0.1, classi IB_DESIGNABLE che non sono all'interno di un quadro ? Non riesco a farlo funzionare. Cosa c'è di peggio, non riesco a eseguire il debug della vista, quando provo a eseguire il debug con il punto di interruzione Xcode si blocca con la palla da spiaggia rotante della morte. –