2009-05-19 6 views
1

J'ai une interface qui a un grand nombre de contrôles, voir l'image ci-dessous.Accès efficace aux nombreux contrôles Cocoa

Interface http://www.richardstelling.com/hosted/cocoainterface.png

Quelle est la meilleure façon d'y accéder, la création de 288 IBOutlets dans ma AppController classe et en les reliant tout semble inefficace. J'ai regardé les formulaires, mais ils semblaient simplistes.

Ceci est une preuve de concept et ne sera pas livré donc je suis ouvert à toutes les idées. Une mise en garde cependant, je dois utiliser Objective-C comme le produit final sera écrit en Objective-C/Cocoa.

NB:

  1. L'interface est statique
  2. boxed plus petits détiendront des entiers (0-255)

Répondre

3

NSTableView ressemble à l'interface utilisateur dont vous avez besoin. Le rendu visuel sera un peu différent mais il semblera plus "Mac".

6

Vous devriez regarder dans NSMatrix. C'est exactement ce qu'il est conçu pour résoudre.

2

Soit NSMatrix, comme Rob suggère, ou repenser l'interface utilisateur afin que vous avez moins de contrôles sur elle :-)

0

Vous pouvez construire toute l'interface programme, avec quelques lignes de code dans une boucle:

const int numRows = 11; 
const int rowWidth = 400; 
const int rowHeight = 20; 
const int itemSpacing = 5; 
const int nameFieldWidth = 120; 
const int smallFieldWidth = 30; 

NSMutableArray * rowList = [[NSMutableArray alloc] initWithCapacity:numRows]; 

int rowIndex; 
NSRect rowFrame = [controlView bounds]; 
rowFrame.origin.y = rowFrame.size.height - rowHeight; 
rowFrame.size.height = rowHeight; 
NSRect itemRect 
for (rowIndex = 0; rowIndex < 11; rowIndex++) 
{ 
    // create a new controller for the current row 
    MyRowController * rowController = [[MyRowController alloc] init]; 
    [rowList addObject:rowController]; 
    [rowController release]; 

    // create and link the checkbox 
    itemRect = rowFrame; 
    itemRect.size.width = 20; 
    NSButton * checkBox = [[NSButton alloc] initWithFrame:itemRect]; 
    [controlView addSubview:checkBox]; 
    [rowController setCheckBox:checkBox]; 
    [checkBox release]; 

    // create and link the name field 
    itemRect.origin.x += itemRect.size.width + itemSpacing; 
    itemRect.size.width = nameFieldWidth; 
    NSTextField * nameField = [[NSTextField alloc] initWithFrame:itemRect]; 
    [controlView addSubview:nameField]; 
    [rowController setNameField:nameField]; 
    [nameField release]; 

    // create and link the smaller fields 
    itemRect.origin.x += itemRect.size.width + itemSpacing; 
    itemRect.size.width = smallFieldWidth; 
    NSTextField * smallField_1 = [[NSTextField alloc] initWithFrame:itemRect]; 
    [controlView addSubview:smallField_1]; 
    [rowController setSmallField_1:smallField_1]; 
    [smallField_1 release]; 

    //.. continue for each item in a row .. 

    // increment the main rectangle for the next loop 
    rowFrame.origin.y -= (rowFrame.size.height + itemSpacing); 
}