Fenster / Views bei größeren Projekten organisieren + Verändern der Elemente aus Xcode (z.B. NSTableView)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Fenster / Views bei größeren Projekten organisieren + Verändern der Elemente aus Xcode (z.B. NSTableView)

    Hallo,

    Ich habe 2 Fragen, die mir gerade bei der Programmierung begegnen.

    1) Wie werden die einzelnen Views / Fenster verwaltet wenn man Programme mit vielen Views / Fenstern für Mac programmiert ? Bis vor kurzem habe ich für jede neue Sicht ein neues Fenster im Storyboard erstellt. Dementsprechend war es auch unübersichtlich und bei jedem Aufruf eines Elements, bei dem eine neue Sicht angezeigt werden sollte, wurde ein neues Fenster aufgerufen. Das ist natürlich nicht schön.
    Jetzt versuche ich zunehmend einen ViewController zu erstellen, der externe XIB Dateien in z.B. SplitView Felder lädt. Ist das der richtige Weg oder gibt es noch eine schönere Methode um die grafische Übersichtlichkeit zu bewahren und eine hübsche Benutzeroberfläche zu erstellen ?

    2) Ich bin gerade dabei eine NSTableView zu erstellen. Diese TableView soll nur eine Spalte und mehrere Reihen enthalten. Nun möchte ich gerne diesen Strich im HeaderView entfernen. Wenn man z.B. auf Stackoverflow sucht, so werden einige Befehle erklärt, die eine NSTableView verändern können. Leider verstehe ich noch nicht genau, wo man diese Befehle reinschreiben muss. Normalerweise ziehe ich eine TableView in den Interfacebuilder und bestimmte die Zellen. Wo kann man das TableView um die entsprechenden Codes erweitern ?
    Mir ist aufgefallen, dass man viele Elemente aus dem IB durch Codes "verändern" kann. Nur leider weiß ich nicht wie das praktisch umgesetzt wird.

    Wenn mir jemand Hilfestellungen zu meinen beiden Fragen geben könnte, wäre das super ;)

    Viele Grüße,
    Robert
  • Hey,

    Meinst du, dass man jeden Button, jeden View per Code schreiben kann. Das ist super und interessant. Angenommen ich möchte jetzt einen NSTableView per Code programmieren um ihn anschließend in einem NSSplitView darzustellen. Erstelle ich diesen NSTableView in einer eigenen Klasse oder im "ViewDidLoad" im ViewController ?

    Ich habe bereits kleinere NSTextFields und Buttons im ViewDidLoad erstellt. Muss dann der ganze Code für die Elemente im ViewController erfasst werden ?
    Wird das nicht extrem unübersichtlich ?

    Gruß,
    Robert
  • Vielen Dank ! Das hat geholfen.

    Jetzt versuche ich eine NSTableView unter einem NSTextField erscheinen zu lassen. Jedes mal wenn man das NSTextField anklickt, soll unterhalb dessen eine NSTableView angezeigt werden. Die NSTableView sollte 2 Spalten haben und eine Liste mit Vorschlägen anzeigen. Außerdem sollte sie angepasst werden wenn der Benutzer in das NSTextField tippt.

    Das ist nun (für mich) ein Fall, der mit den durch Xcode bereitgestellten Elementen nicht zu bewerkstelligen ist. Ich würde die Sache so bearbeiten:

    1) -(void)controlTextDidChange:(NSNotification *)obj {
    Code um Tabelle zu erstellen
    }

    2) Das entsprechende TextField mit dem delegate verbinden.
    .
    Leider verstehe ich nur nicht, wie ich das NSTableView "richtig" positionieren soll. Es soll immer, unabhängig von der Fenstergröße, unter dem entsprechenden NSTextField erscheinen.

    Viele Grüße,
    Robby99
  • Prinzipiell ist es mit einer NSCombobox auch möglich. Jedoch soll die Tabelle etwa 400 Einträge enthalten und da ist es einfach schöner eine Tabelle mit Suchfeld und Autosuggestion Funktion zu programmieren, welche auftaucht sobald der Benutzer das Feld anklickt. Es wäre auch schön, wenn die Hintergrundfarbe für jedes zweite Feld leicht gräulich ist.
  • Nun, jetzt habe ich mal eine NSTableView in das Fenster gezogen und es unter meinem NSTextField positioniert.

    Ich verstehe nur nicht wie ich dem NSTableView den Befehlt "zeige dich nur wenn das NSTextField angeklickt / getippt wird" und "aktualisiere dich entsprechend den Benutzereingaben" vermitteln kann.
  • Entschuldigung, ich verstehe das nicht. Ich glaube das ist ein Grundverständnisproblem bei mir. Wie bekomme ich das im Code mit ? Kann ich mir den Code vom TableView anzeigen lassen ?

    Kannst du mir vielleicht einen Screenshot posten ?

    Vielen Dank für deine Hilfe !
  • ich denke du weißt nicht wie man ein tableview befüllt oder?

    da gibt es im prinzip zwei methoden. indem du die data-source-methoden selbst implementierst und dort die entsprechenden werte lieferst die angezeigt werden sollen oder eben indem du einen NSArrayController an die tableview bindest.

    mit den zwei genannten stichworten kannst du dir für beides beispiele und turorials und dokumentation ergooglen ;)
  • Es geht darum, dass ich nicht verstehe wie ich eine Verbindung herstellen kann zwischen dem Ereignis, dass das NSTableView angeklickt wurde und dem erscheinen des NSTableView.

    Jetzt habe ich, nur für Übungszwecke, ein NSTableView und eine NSTextField erstellt.
    Die Tabelle wird mit den Methoden a und b aus Beitrag 17 mit Daten versorgt. Es funktioniert auch soweit.

    Wie geht es nun weiter ? Das verstehe ich nicht. Wo muss ich die Methode "enclosingScrollView" angeben ?