Bei Laufzeit TextFelder etc. erstellen

  • RE: Bei Laufzeit TextFelder etc. erstellen

    Die Erzeugung ist kein Problem. Ich mache das etwa in einem CustomView:

    Quellcode

    1. // initialize label textfield
    2. // add the label text field
    3. label = [super viewWithTag:'LABL'];
    4. if( label == nil ) {
    5. label = [[[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 17, 17)] autorelease];
    6. if( label == nil ) {
    7. return nil; // +++ RETURN +++ ERROR: no textfield for label
    8. }
    9. [super addSubview:label];
    10. }
    11. [label setBezeled:NO];
    12. [label setTag:'LABL'];
    13. [label setEditable:NO];
    14. [label setSelectable:YES];
    15. [label setAutoresizingMask:NSViewNotSizable];
    16. [label setStringValue:_label];
    Alles anzeigen


    In ein Window solltest du sie allerdings nicht einhängen. Das Window hat einen Root-View, den sogenannten ContentView. Da gehören sie herein (mit -addSubview: ). Wenn du noch andere Sachen im View hast, empfiehlt es sich allerdings, einen eigenen "Oberview" für die Textfelder zu kreieren (Einfach CustomView hereinziehen und custom class auf NSView setzen.) und dort die Subviews anzulegen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Brauche auch hilfe...

    Hi,

    it's always better to post in an existing Thread than to create a new one ;). Deshalb kommt meine Frage hier rein.

    Also, ich habe mir auch eine CustomView gebastelt, in der ein TextField erstellt werden soll. Die CustomView zeichnet aber auch noch etwas. Damit das TextField nicht die ganze Zeit ausgewählt ist, habe ich es deaktiviert und will es erst über ein Doppelklick auswählen. Nun sieht das ergebniss aber nicht gut aus und wenn man noch die Fenstergröße nach auswählen des TextFields ändert, dann verschwindet der Focusringtyp ganz. Auch kann ich keine Delegate Methoden von dern künstlich erzeugten TextFields verwenden.
    Habe dann mal hier im Forum gesucht, ob das Problem bekannt ist und bin auf diesen Thread gestossen.

    Vielleicht kann mir einer helfen...
    There are 10 kinds of people in the world - those who understand binary
    and those who don't.
  • RE: Bei Laufzeit TextFelder etc. erstellen

    Ich würd es empfehlen, den code an dieser stelle etwas anders zu machen:

    Quellcode

    1. if( label == nil ) {
    2. label = [[NSTextField alloc] initWithFrame: NSMakeRect(0, 0, 17, 17)];
    3. NSAssert(label != nil, @"ERROR");
    4. [self addSubview: label];
    5. [label release];
    6. }
  • RE: Brauche auch hilfe...

    Doch, allerdings ohne mir das Projekt genauer angeschaut zu haben.

    Wirf doch mal einen Blick in Sketch.xcode. Die machen doch etwas Ähnliches. Beim Übrfliegen sieht das so aus, dass die sich einfach ein NSTextField bauen und als Editor anmelden.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Brauche auch hilfe...

    Hi Tom,

    endlich eine Antwort :). So, habe mir Sketch mal angeschaut und beschlossen, es mal ganz durch zu arbeiten, ist bestimmt interessant und hilfreich. Habe auch die Stelle gefunden, aber das löst mein Problem nicht, da ich eigentlich alles richtig gemacht haben dürfte.

    Danke

    Squart
    There are 10 kinds of people in the world - those who understand binary
    and those who don't.
  • RE: Brauche auch hilfe...

    OK, so viel Zeit hat das auch noch bei mir. Vielen Dank auf alle Fälle. Sketch ist meine nächste Lektüre (Hab schon angefangen und ist wirklich gut; kann bestimmt viel davon lernen).
    Und viel Spass bei der Abrechnung (halt so viel Spass, wie man dabei haben kann) ;).
    There are 10 kinds of people in the world - those who understand binary
    and those who don't.
  • RE: Brauche auch hilfe...

    OK, ich melde mich mal wieder.

    Tom, könntest du bitte den Code anschauen, um den Fehler zu finden? Ich kriege es leider immer noch nicht hin.
    Vielen Dank schon im Voraus.
    There are 10 kinds of people in the world - those who understand binary
    and those who don't.
  • RE: Brauche auch hilfe...

    Ich habe ihn mal heruntergeladen und kurz angeschaut. Naja, gestern war ich nch etwas resttrunken, bin erst um 07.00 ins Bett gekommen.

    Ich schaue es mir mal in den nächsten Tagen an. Sag mal, hältst du einen Focus Ring auf einem Dokument überhauzpt für sinnvoll? Sieht irgendwie komisch aus.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Brauche auch hilfe...

    Hmm, beim ersten mal mit dem FocusRingType habe ich ja NSFocusRingTypeNone gewählt. Beim zweiten mal NSFocusRingTypeDefault. Aber selbst wenn man dies weg macht, sieht es seltsam aus.
    There are 10 kinds of people in the world - those who understand binary
    and those who don't.
  • RE: Brauche auch hilfe...

    Also, ich finde es auch nicht richtig. Sketch benutzt ja ein TextView.

    Testweise habe ich mal im nib ein TextField erzeugt. Es geht auch einigermaßen. Nach einem -display sieht das ganze gut aus. Sobald ich jedoch auch nur einen Tab drücke oder ähnliches, erscheint seitlich ein seltsamer Rand. Wo der herkommt, weiß ich auch nicht. Vielleicht probierst du erst einmal in dieser Richtung weiter. Setze die Farben für Background usw. mal auf verschiedene Werte. Vllt kann man so die Ursache finden.

    Tut mir leid!
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Brauche auch hilfe...

    Original von Squart
    Hmm, beim ersten mal mit dem FocusRingType habe ich ja NSFocusRingTypeNone gewählt. Beim zweiten mal NSFocusRingTypeDefault. Aber selbst wenn man dies weg macht, sieht es seltsam aus.

    Ich habe mir das jetzt auch mal angeschaut. Zunächst mal brauchst Du mit -setFocusRingType: gar nicht herumspielen. D.h. den kannst Du einfach in -awakeFromNib auf NSFocusRingTypeDefault setzen und gut ist. Wobei selbst das gar nicht nötig ist, weil das die Defaulteinstellung ist. Dann ist das Verhalten beim Doppelklick nicht sauber. Das Textfeld wird zum einen bereits nach 1,5 Klicks aktiviert, der Focusring erscheint aber erst, wenn man noch einmal drauf klickt. Daher würde ich zum einen statt -mouseDown: die -mouseUp: Methode nehmen und zum anderen fehlt am Ende der Methode noch

    Quellcode

    1. [[self window] makeFirstResponder:textField];

    Zur Darstellung des Focusrings. Das Problem ist, dass Du dem Textfeld bei der Erstellung ein [textField setBezeled:NO]; schickst. NSTextField kommt damit scheinbar nicht klar, denn wenn Du da mal YES übergibst, dann funktioniert das Ganze wunderbar.

    Michael