NS View anfänger Frage

  • NS View anfänger Frage

    Hallo, ich bin absoulouter Cocoa Anfänger und habe mich heute zum ersten mal an einem NSView gewagt.

    Ich habe jetzt im IB ein Custom View eingefügt und dafür eine Klasse (hintergrund) erstellt, auf der ich nun zeichne. Diese Klasse zeichnet den Hintergrund etc. Jetzt will ich eine weitere klasse haben die auch etwas auf zeichtet und zwar dann in die klasse hintergrund....

    wie geht das?

    danke
  • Noch eine NSView Subclass, die dann als Subview deines Hintergrund-Views fungiert?

    Je nach Anwendungsfall kann es auch sinnvoller sein, Hintergrund und Inhalt direkt in einem View zu realisieren, in dem Fall erweiterst du deine drawRect: Methode einfach ein wenig.
  • Eigentlich paßt meine Frage ganz gut hier rein. Ich habe ein CustomView, in das ich schon eine ganze Menge gezeichnet habe. Nun will ich natürlich auch Funktionalität hinzufügen in Form von mehreren NSTextField-Instanzen, deren draw-Methoden ich später noch überschreiben will.

    Ich habe es mit folgendem Ansatz probiert, sehe aber kein Textfeld.

    Quellcode

    1. -(void)drawRect:(NSRect)rect {
    2. ...
    3. NSTextField* fontNameField = [NSTextField new];
    4. [fontNameField setFrameOrigin:NSMakePoint(11, 671)];
    5. [self addSubview:fontNameField];
    6. ...
    7. }
    Die Lösung ist sicher ganz einfach, deshalb hoffe ich auf eure Hilfe.

    Viele Dank im Voraus
    Marco
  • Original von m99
    Ich habe es mit folgendem Ansatz probiert, sehe aber kein Textfeld.

    Quellcode

    1. -(void)drawRect:(NSRect)rect {
    2. ...
    3. NSTextField* fontNameField = [NSTextField new];
    4. [fontNameField setFrameOrigin:NSMakePoint(11, 671)];
    5. [self addSubview:fontNameField];
    6. ...
    7. }
    Die Lösung ist sicher ganz einfach, deshalb hoffe ich auf eure Hilfe.


    In der drawRect: Methode solltest Du nur das machen, wozu die Methode gedacht ist, nämlich das Zeichnen des Views. Die Textfelder kannst Du doch einfach im Interface Builder hinzufügen.

    Michael
  • Michael du hast vollkommen recht :D

    Im IB sah es so aus, als ob das CustomView durch den hinzugefügten Button verschwindet. Aber das war ein Trugschluß. Dann brauche ich für meine eigenen Buttons ja nur noch die Klasse NSButton ableiten und die draw-Methode überschreiben. Zum Beispiel benötige ich keinen Rand.

    Marco
  • Original von m99
    Zum Beispiel benötige ich keinen Rand.

    Bevor Du da groß ableitest, guck Dir mal die ganzen Optionen im IB an, "Bordered" kannst Du einfach ausschalten, vielleicht reicht das ja schon.
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • Original von m99
    Super Tipp. Das hat wirklich eine Menge Arbeit erspart. Kann ich denn auch die darin benutzte Schriftgröße bestimmen? Sicherlich über ein Outlet für das Textfield oder?

    Einfach den Button markieren und dann "Font" > "Show Fonts". :)
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • Eine Frage hätte ich noch, nachdem ich mir jetzt das Interface erst einmal mit den Standard-Controls und ein wenig Modifikation an den Einstellungen gebastelt habe (was mir sicher zwei, drei Tage Arbeit erspart hat). Welches Control muß ich verwenden, wenn eine Mehrfachauswahl aus einer festen Liste von Einträgen getätigt werden soll? Zur Zeit sind es NSPopUpButtons.

    Marco
  • Hallo Gabriel,

    es sind immer maximal 17 Elemente, von denen man beliebig viele auswählen kann. Verwirrt mich etwas, daß es dieses Control in der Form garnicht zu geben scheint. Dabei ist diese Interaktion doch nicht besonderes. Es muß ja irgendwie möglich sein, eine Mehrfachauswahl zu implementieren. In welcher Form auch immer.

    Marco
  • Ich werde die Mehrfachauswahl wohl erstmal hinten anstellen. Nun habe ich eine weitere Herausforderung. Für eine bestimmte Anzahl von Werten benötige ich farblich unterschiedliche Buttons. Man soll sie drücken können, weshalb eine Einstellung auf transparent wegfällt und sie sollen ein verschieden eingefärbtes Quadrat statt eines Labels tragen. Dabei kann ich im Voraus noch nicht sagen, wieviele Buttons es werden, weshalb ich sie wohl dynamisch im Quelltext hinzufügen muß.

    Kann ich denn für diesen Fall in der drawRect: Methode arbeiten? Wie binde ich die Buttons in das CustomView ein (sicherlich irgendwie als SubView)? Letztendlich will ich den Buttons auch noch ein farbiges Quadrat »aufsetzen«. Gibt es Alternativen zu einem Icon, was die Sache sehr undynamisch und speicherintensiv machen würde?

    Marco
  • Ich finde im IB kein entsprechendes Control :( Ist das NSColorWell von Hand zu programmieren? Und es scheint so, daß es sich dabei um das systeminterne Farbauswahlfenster handelt. Also ein Standardfenster ähnlich dem der Schriftauswahl oder?

    In diesem Thread ist ein Screenshot zu sehen, auf dem so ein »farbiger« Button integriert wurde. Solange ich dessen Farbe frei definieren kann für NSColor (was sicher der Fall sein wird), wäre das genau das, was ich brauche.

    Marco