Frage

Ich versuche, programmatisch ein Fenster mit benutzerdefinierten contentView und einer benutzerdefinierten NSTextField Kontrolle zu schaffen, aber ich habe Probleme mit dieser Hierarchie der Fenster bekommen und Ansichten sie zu ziehen.

ich erstellen Sie eine benutzerdefinierte randlos Fenster und überschreiben sie setContentView / contentView Accessoren ist. Dies scheint in Ordnung und individuelle content der initWithFrame und drawRect Methoden verursachen content aufgerufen zu arbeiten selbst richtig zu zeichnen.

Aber sobald ich programmatisch versuchen das Hinzufügen von benutzerdefinierten NSTextField contentView es nicht hinzugefügt oder gezogen bekommt. Indem man sagt, benutzerdefinierte ich meine, dass ich es bezeichnet initializer außer Kraft setzen (initWithFrame:frame - nur für benutzerdefinierte Schrifteinstellung) und drawRect Methode, die wie folgt aussieht:

- (void)drawRect:(NSRect)rect {
    NSRect bounds = [self bounds];
    [super drawRect:bounds];
}

Die initializer der benutzerdefinierten content sieht wie folgt aus:

- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self != nil) {
      // i want to draw itself to the same 
      // size as contentView thus i'm using same frame
      CustomTextField *textField = [[CustomTextField alloc] initWithFrame:frame];
      [self addSubview:textField];
      [self setNeedsDisplay:YES];
    }
    return self;
}

Ich habe für einige Stunden mit diesem worden strugling so alle Hinweise sehr geschätzt werden. Weiterer Code ist auf Anfrage erhältlich.)

War es hilfreich?

Lösung 2

Vielen Dank für Ihre Antworten!

fand ich mein eigenes Problem. Der Grund, warum drawRect wurde nicht genannt wird, weil benutzerdefinierte Textfeld gezogen wurde außerhalb der Rahmen der Inhaltsansicht. Ich denke, ich vergaß entscheidendes Detail zu erwähnen, dass ich Fenster auf dem Bildschirm zentriert Zeichnung bin damit es Rahmen war mit x / y-Offset.

Um das Fenster zu füllen mit seinem Inhalt anzeigen I content mit gleichen Rahmen wie Fenster init (dh den gleichen (x; y) versetzt Fenster (0; 0) Punkt).

Jetzt bin ich gerade nicht in der Lage, um benutzerdefiniertes Textfeld zu schreiben, aber das ist ein anderes Problem, das ich glaube, ich bin in der Lage zu handhaben.

Andere Tipps

Ihre -drawRect: Überschreibung scheint falsch zu mir, warum soll man bewusst ignoriert die in rect Argumente übergeben? Warum ist das notwendig?

Was, warum das Textfeld nicht angezeigt wird, dann ist es sehr wahrscheinlich, weil Sie es nicht konfiguriert haben. Wenn Sie einen NSTextField in Code erstellen, müssen Sie nicht das Gleiche wie die Standardinstanz, die Sie erhalten, wenn Sie ein Textfeld auf eine Ansicht in IB ziehen. Sie müssen die NSTextField und seine NSTextFieldCell konfigurieren, um das Aussehen zu erhalten, die Sie wünschen.

Ich bin mit einem Programm hinzugefügt Textfeld, das ich so konfigurieren:

_textField = [[NSTextField alloc] initWithFrame:textFieldRect];
[[_textField cell] setControlSize:NSSmallControlSize];
[_textField setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
[_textField setBezelStyle:NSTextFieldSquareBezel];
[_textField setDrawsBackground:YES];
[_textField setBordered:YES];
[_textField setImportsGraphics:NO];
[_textField setAllowsEditingTextAttributes:NO];
[_textField setBezeled:YES];
[_textField sizeToFit];
[self addSubview:_textField];
[_textField setFrame:textFieldRect];
[_textField setAutoresizingMask:NSViewMinXMargin];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top