Versteckbare NSTableColumn

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

  • Versteckbare NSTableColumn

    Hi,
    ich habe mich schon öfters darüber geärgert, dass man die hidden property von NSTableColumn nicht im IB an die UserDefaults binden kann. Um dieses Problem zu lösen, habe ich mir einfach eine SubKlasse von NSTableColumn geschrieben.

    Man wählt im IB einfach eine NSTableColumn an und ändert die Klasse in NSHiddenTableColumn. Wenn man den Identifier im IB angibt hat man nun zwei bzw. drei Möglicheiten:

    1. Identifier = identifier (keine Bindung an NSUserDefaults)
    2. Identifier = identifier@<Prefkey>
    3. Identifier = identifier = PrefKey

    Registriert man seine UserDefaults muss man einfach den identifier oder den PrefKey als Schlüssel angeben, ein [NSNumber numberWithBOOL:BOOL] als value und ein UI-Element an diesen Key über einen NSUserDefaults-Controller binden. Schon kann der User nach belieben Columns an - und abwählen.

    Die Source habe ich angehängt, sieht erstmal ein bisschen dreckig aus, da ich ursprünglich noch andere Categories eingebunden habe, die den Code übersichtlicher machen. Diese Subklasse funktioniert mit Bindungen, NSTableViewDataSource und NSOutlineViewDataSource.

    Wenn ihr Verbesserungsvorschläge habt immer her damit, da ich noch nicht lange mit Cocoa arbeite und mir nicht sicher bin, ob diese Methode die eleganteste ist, aber sie funktioniert ;)

    Viele Grüße
  • Stimmt, aber es fehlt die Möglichkeit den Schlüssel direkt im IB angeben zu können, was die ganze Sache doch sehr vereinfacht. Ich weiß nicht wie man es normalerweise macht, also ob man eine Subklasse schreibt, die das automatisch macht oder ob man die TableColumns als Outlet anwählt und dann die property bindet, finde ich persönlich unschön.
  • Stimmt schon, dass es natürlich feiner wäre, wenn es im IB ginge. Aber wenigstens geht es überhaupt.. Ich habe meistens ein Outlet der TableView. Dann kannste dir die Column über den Identifier holen und dann binden. Dann brauchste nicht für jede Column ein separates Outlet.. Gruß Alex