NSDrawer mit Inhalt füllen

  • NSDrawer mit Inhalt füllen

    Hallo Leute!

    Ich habe mir im IB ein Fenster mit Drawer erstellt. Die Connections habe ich gesetzt und kann
    den Drawer nun auch togglen.
    Meine Frage ist nun: Wie kann ich den Drawer denn irgendwie füllen?
    Ich würde gerne in dem Drawer Thumbnails von Bilder anzeigen lassen. Muss man dann erst
    einmal einen TableView dort reinstecken? Wenn ja, wie geht das? Ich habe keine Ahnung :(

    Viele Grüße und vielen Dank!
  • RE: NSDrawer mit Inhalt füllen

    Du erstellst Dir einfach einen View im IB und verbindest dann den contentView des Drawer mit dem View. Soviel zur Frage bezügl. Drawer mit Inhalt füllen.

    Schwieriger wird es bei dem gewünschten Inhalt des Drawer. Ein TableView mit ImageCells könnte jedoch funktionieren.
  • RE: NSDrawer mit Inhalt füllen

    Also ich habe im IB aus dem Fenster Cocoa Containers ein NSView in das Instances Fenster gezogen.
    Richtig?
    Dort ist allerdings schon ein DrawContentView (wurde angelegt als ich das Fenster mit Drawer erstellt hatte).
    Jetzt frage ich mich gerade, wie kann ich zB einfach ein Bild in diesem View anzeigen lassen?
    Mit [myDrawer setImage:myImage]; ?

    (Ihr müsst etwas detaillierter antworten, ich versteh noch nicht so viel ;-))
  • RE: NSDrawer mit Inhalt füllen

    Original von Jaxx0r
    Also ich habe im IB aus dem Fenster Cocoa Containers ein NSView in das Instances Fenster gezogen.
    Richtig?
    Dort ist allerdings schon ein DrawContentView (wurde angelegt als ich das Fenster mit Drawer erstellt hatte).

    Dann benötigst Du keinen weiteren View. Mach einfach mal einen Doppelklick auf den DrawContentView. Der öffnet sich dann und Du kannst die Größe einstellen und all die Elemente drauf ziehen, wie auf ein normales Fenster auch.

    Michael
  • RE: NSDrawer mit Inhalt füllen

    OK,

    und ich ziehe dann einen NSTableView in das kleine Fenster...
    Wenn mir jetzt noch jemand sagen kann wie ich der Tabelle beibringe, dass diese nur Spalten
    hat in der Bilder sind, wäre ich schon eine ganze Ecke schlauer.
    Im IB kann ich ja angeben, dass die Tabelle x Spalten hat und nur eine Zeile. Das ist schon mal
    gut so.

    Vielen Dank soweit!
  • RE: NSDrawer mit Inhalt füllen

    Also ein Drawer ist erstmal ein dummes Fenschterl ge und wird auch nicht im IB angezeigt! Wenn Du thumbs anzeigen willst, solltest Du in etwa wie folgt vorgehen. (Togglen kannste ja schon, das erspare ich mir jetzt)

    1. Jeder Drawer braucht einen ContentView sozusagen. Also ziehst Du einen neuen CustomView in dein IB Hauptfenster. Dort musst Du noch das ContentView Outlet vom Drawer mit dem Custom View verbinden. Das ist dann Deine Ausgangsbasis.

    2. Ziehe einen TableView in de CustomView und lege einen neuen ArrayController an. Das Column des TableViews bindest Du dann an "thumbs". Zusaätzlich musst Du noch nen Formater vom Typ NSimageView in die column ziehen. Ansonsten erwartet das Column nur Text.

    3. Jetzt brauchst Du nur noch ein Objekt, welches Dir das Bild in die Column wirft. Dazu legst Du einfach einen AppController (Subklasse NSObject) an und implementierst beispielsweise awakeFromNib. Einfach ein Dictionary mit dem image in den ArrayController legen mit key "thumbs"

    4. Fertig! Run! Viel Spaß. Anbei das Testprojekt in 5min schnell zusammengeschmissen.

    P.S: Wieso stiefelst Du als unsichtbar durchs Forum, wenn Du doch Fragen hast? Wirst Du von jemandem verfolgt?
  • RE: NSDrawer mit Inhalt füllen

    Hi kay,

    vielen Dank für deinen Beitrag und das angehängte Projekt!

    Was meinst du mit unsichtbar durchs Forum stiefeln? Mach ich was falsch?

    Zu deinem Programm:
    Leider weiß ich noch nicht was ein ArrayController ist und was ein Formater ist.
    Wie man einen Formater in ein Coloumn zieht auch nciht ;) Tut mir leid, ich bin
    leider noch absoluter cocoa-Anfänger :(
    Was ein NSDictionary ist weiß ich auch noch nicht.

    Aber ich denke das was ich machen will ist nicht besonders schwierig, man muss es nur einmal
    gemacht und verstanden haben.
  • RE: NSDrawer mit Inhalt füllen

    Das Column des TableViews bindest Du dann an "thumbs". Zusaätzlich musst Du noch nen Formater vom Typ NSimageView in die column ziehen. Ansonsten erwartet das Column nur Text.


    Das verstehe ich nicht. Ich weiß nicht wo und wie ich im IB klicken muss um das hinzubekommen :-/
  • RE: NSDrawer mit Inhalt füllen

    Danke für den Link!
    Werd ich mir durchlesen.

    Kannst du mir nur eben sagen, wie ich meine Row (ich habe 20 coloums) mit dem ArrayController
    verbinde? (mit thumbs?)

    Dann sollte ich es eigentlich schon geschafft haben.

    Danke!

    P.S.: Geist Modus änder ich noch :)
  • RE: NSDrawer mit Inhalt füllen

    Also...Du selektierst ein Column und wählst im Inspektor "Bindings" aus (DropDown Menü).
    Dann wählst Du value und bindest es an den ThumbController mit dem key thumbs. Fertig! Den ThumbController musst Du natürlich auch erst anlegen. Siehe grüne box im Testprojekt.
  • RE: NSDrawer mit Inhalt füllen

    OK, das habe ich alles gemacht. Das einzige was noch fehlt ist den Formatter für die table festlegen, damit dort Grafiken erscheinen.
    Ich versuche mal was zum Thema formatter etc. zu finden.
    Wenn du es mir hier sagst freue ich mich natürlich auch ;)
    Danke soweit!
  • RE: NSDrawer mit Inhalt füllen

    Der Spalte, in welcher die Bilder erscheinen sollen, muss NSImageCell als 'cell-type' zugewiesen werden. Im IB in der Palette 'table' ist oben links ein Prototyp, den Du auf Deine Spalte ziehen musst.
    Deren Inhalt kannst Du dann an NSImage binden, eben das 'thumb' aus dem Beispiel. Andere 'cells' funktionieren nicht.
    W.
    I would be embarrassed if they did not spy on me.
  • RE: NSDrawer mit Inhalt füllen

    Ah, eine Frage habe ich dann doch noch.

    Wie kann ich die Bilder wieder aus der Tabelle löschen?
    Gibt es sowas wie ein Reset oder init?

    Sorry für diese Anfänger-Fragen. Bin erst seit kurzer Zeit mit Cocoa unterwegs :-/
  • RE: NSDrawer mit Inhalt füllen

    Ich habe versucht eine Schleife über alle Elemente zu machen:


    int j;
    for (j = 0; j < [imageArray count]; j++){
    [thumbController removeObjectAtArrangedObjectIndex:i];
    }

    Das funktioniert leider nicht. "thumbController" ist dieser NSArrayController...
  • Die einfachste Möglichkeit wäre, einfach einen Button in dein Fenster zu ziehen, dessen Target auf den "ThumbController" zu setzen (Ctrl-Drag vom Button auf die grünen "Kisten") und die Action auf remove: zu setzen. Damit wird dann bei Button-Klick automatisch das im TableView ausgewählte Element gelöscht.

    Du kannst auch noch das enabled-Attribut des Buttons an den canRemove-Key des ArrayControllers binden (Im Inspektor unter Bindings...). Dann wird der Button ausgegraut, falls nix markiert oder der ArrayController leer ist.

    Wenn du dann noch multiple-selection im TableView aktivierst, kannst du auch mehrere (oder per Apfel-A alle) Einträge der Tabelle markieren und löschen....
  • RE: NSDrawer mit Inhalt füllen

    Original von Jaxx0r
    int j;
    for (j = 0; j < [imageArray count]; j++){
    [thumbController removeObjectAtArrangedObjectIndex:i];
    }

    Das funktioniert leider nicht.

    Wenn Du jetzt wüstest, wie ein NSTableView und ein NSArrayController überhaupt funktioniert, dann wüstest Du auch, warum diese Schleife nicht das gewünschte Ergebnis liefern kann. Ich weiß nicht, ob man durch Erfragen jedes Arbeitsschrittes wirklich etwas lernt. Ich könnte das jedenfalls nicht. Was ich so aus Deinen Fragen auch lese ist, dass Du zur Funktionsweise von NSTableView zwar eine eigene Vorstellung hast, aber diese leider nichts mit der wirklichen Funktionsweise zu tun hat. Leider hat man Dir hier auch noch das Thema Cocoa Bindings mit "eingeschenkt" und dann auch noch falsche Begriffe verwendet (eine NSImageCell ist kein Formatter!). Das trägt alles nicht gerade zur Klarheit bei.

    Ich würde Dir daher in Sachen NSTableView erst einmal raten Dir dies hier zu Gemüte zu führen. Obwohl, wenn Du noch nicht einmal weißt, was ein NSDictionary ist, solltest Du vielleicht sogar hier erst einmal vorbei schauen.

    Michael