2013-06-26 2 views
1

Dans mon application, je dois avoir un splitView et pouvoir insérer mes propres vues dans les volets. À cette fin, dans le générateur Interface, j'ai créé un SplitView avec deux séparateurs (trois volets) et ajouté les «Vues personnalisées» qui se trouvent dans ces trois volets sous la forme IBOutlets à mon contrôleur de vue correspondant. Cependant, quand j'interroge le IBOutlets pour leurs tailles de cadre/limites, ils sont tous 0.00000. Pourquoi les vues personnalisées que j'ai créées dans Xcode ont-elles une taille de 0? Comment puis-je résoudre ce problème?Xcode, Affichage personnalisé - aucune image/limite

UPD: le code pour interroger le cadre/limites des vitres:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     self.logList = [[LogListViewController alloc] initWithNibName:LOGLISTXIB bundle:nil]; 
     [self logARect:self.leftPane.bounds withName:@"LeftPane bounds"]; 
     [self logARect:self.leftPane.frame withName:@"LeftPane Frame"]; 
    } 
} 
- (void) logARect:(NSRect) theFrame withName:(NSString *)name { 
    NSLog(@"%@ frame: %lf, %lf, %lf, %lf", name, theFrame.origin.x, theFrame.origin.y, theFrame.size.width, theFrame.size.height); 
} 

UPD2 En même temps, quand j'accède aux vitres par self.view.subviews[0], je reçois la bonne taille.

+0

pouvez-vous afficher le code que vous utilisez pour interroger les tailles et les limites de ces vues personnalisées? –

+0

@AdamRichardson J'ai ajouté le code pertinent en tant que mise à jour à mon message. Merci. – Ibolit

Répondre

1

Il s'avère que l'initialiseur n'est pas l'endroit pour interroger la taille des vues, ce qui semble être le cas. Lorsque je vérifie la taille des vues dans la méthode -awakeFromNib, elles sont correctes. Cela semble logique.

1

Les vues ne sont probablement pas encore définies lorsque vous essayez d'obtenir les positions. La question viewDidLoad in NSViewController? indique que loadView doit être utilisé pour modifier la disposition de la vue. Ce answer dans la même question montre une astuce pour rendre votre code Cocoa similaire à celui de Cocoa-touch.

+0

C'est Cocoa, maintenant j'ai ajouté l'étiquette correspondante. Pour autant que je sache, il n'y a pas de méthode correspondante dans Cocoa. – Ibolit

+0

Avez-vous résolu le problème? – allprog

+0

Pas encore. Mais je suis en train de faire tous les réglages par programme au lieu de les câbler dans IB. Cela sert mon but, mais il ne répond pas à la question initiale. – Ibolit

Questions connexes