NSTextField + NSString + NSDate

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

  • NSTextField + NSString + NSDate

    Hallo,

    folgendes Problem:

    In einem (readonly) NSTextField wird ein Datum angezeigt. Falls das zu zeigende Datum nil ist soll das TextField einen beliebigen String anzeigen.

    Mit einem ValueTransformer funktioniert das Ganze nicht, da in einem Fall (datum == nil) ein NSString und in jedem anderen Falle ein NSDate Objekt geliefert werden soll.

    Müsste ich da NSDateFormatter subclassen?

    Eine andere Lösung wäre ja dem Textfeld selbst keinen Formatter zu verpassen und stattdessen dem Textfeld das zu zeigende Datum direkt als String übergeben - "intern" kann der eigene ValueTransformer ja einen NSDateFormatter nutzen.

    Wie sähe euer "Ansatz" aus?
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • RE: NSTextField + NSString + NSDate

    Ganz DRECKELIGE Lösung gefällig?

    Du machst dort ein Textfeld mit Date-Formatter rein und eines ohne. Die Werte bindest du jeweils. Dann bindest du zusätzlich das Hidden-Attribut einmal auf nil und einmal auf not-nil in Bezug auf das Datum.

    So, und jetzt gehe ich mir diese Latexmütze mit Reißverschluss überziehen und lasse mich auspeitschen.
    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: NSTextField + NSString + NSDate

    Original von MCDan
    Da Du anscheinend Binding verwendest, kannst Du den beliebigen String, der angezeigt werden soll wenn das Datum nil ist, doch einfach im Null Placeholder des Value Bindings definieren.

    Oder soll nicht immer der selbe beliebige String angezeigt werden?

    IIRC muss der Nil-Value ein Datum sein, sonst gibt es Ärger. Der hängt sozusagen vor der Formatierung.
    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"?
  • hns: Dein Vorschlag gefiel mir so gut, dass ich ihn ausprobiert habe.

    Quellcode

    1. [[textField cell] setPlaceholderString:@"*tom auspeitsch*"];


    Wird das value des textFields nil erscheint kein placeholderString im textField.

    Dann werde ich wohl den Formatter raushauen und mit einem NSDateFormatter einen NSString erzeugen und den anzeigen.
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • AUA! (Peitsche abnehm und rektal einführ) Pass das nächste Mal auf!

    Ich mache das aber auch. Ich habe hier ein paar Felder, die aus dem AddressBook befüllt werden, wenn man in der Mandantenliste einen anwählt. Ist keiner angewählt, dann bekommen die alle ein hidden und einem Textfeld mit dem Inhalt "Kein Mandant ausgewählt" wird es genommen.

    Das sieht deutlich besser aus als 254376235 Felder, in denen einfach "Nichts ausgewählt" steht -- oder auch "Nichts ausge".
    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"?
  • Original von Tom9811
    (Peitsche abnehm und rektal einführ)


    Mir oder dir?


    Ich mache das aber auch. Ich habe hier ein paar Felder, die aus dem AddressBook befüllt werden, wenn man in der Mandantenliste einen anwählt. Ist keiner angewählt, dann bekommen die alle ein hidden und einem Textfeld mit dem Inhalt "Kein Mandant ausgewählt" wird es genommen.


    Naja - ich habe schon soooo viele Textfelder deren value an sooooo langen keyPaths hängt und nun willst du mir noch mehr aufdrücken? :D
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Wenn es sich um mehrere Textfelder handelt mache ich den Vorschlag, einen tabless Tab zu nehmen und da einen Tab für "nichts ausgewählt" anzulegen, da ist man mit weniger Code am Ziel und kann nochmal ein Textfeld in dem Tab mit den anderen Textfeldern anlegen ohne wieder Code schreiben zu müssen.

    Oh, und um dazu auch was gesagt zu haben: was man mir wo einführen darf hängt lediglich von der Bezhalung ab. Meiner Bezahlung.
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • Ahhh lol. Meine Güte - was ist heute los mit mir. Toms Vorschlag löst mein Problem leider nicht.

    Hintergrund: In dem Fenster werden Daten zu einer ausgewählten Karteikarte angezeigt - u.a das Datum, wann man diese zu letzt gelernt hat. Bei einer neu angelegten Karteikarte ist das Datum "nil", da man sie noch nicht gelernt hat. Ich kann es also leider nicht wie in Toms Screenshot zu sehen handlen.
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Hmmm, mal abgesehen, dass ich davor warnen möchte, in einem Splitview einen Tabview mit Textfeldern zu haben, weil sich dann die UI des IB in rasanter Geschwindigkeit von unbedienbar in völlig unbedienbar wandelt, fällt mir zur Code-Ersparnis folgender Witz ein:

    Ein Mathematiker, ein Physiker und ein Pfarrer sitzen vor der Tür eines leeren Raumes, der sonst keinen Ausgang hat und spielen Skat. Auf einmal verlässt jemand den Raum. Alle drei schauen sich groß an:

    Pfarrer: "Das ist der Beweis! ES GIBT EINEN GOTT!"
    Physiker: "Hmmmm, Energie wandelt sich zu Materie hmmm Tunnel-Effekt hmmm Miclhtüte hmmm"
    Der Mathematiker zuckt desinteressiert mit den Schultern: "Wenn jetzt einer reingeht, ist der Raum wieder leer -- Schneider angesagt."
    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"?
  • Äh, behaves as intended?
    In einem (readonly) NSTextField wird ein Datum angezeigt. Falls das zu zeigende Datum nil ist soll das TextField einen beliebigen String anzeigen.


    Kannst du mir mal genau erklären, wann das Datum sichtbar sein soll und wann nicht?
    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"?
  • Original von Tom9811
    Hmmm, mal abgesehen, dass ich davor warnen möchte, in einem Splitview einen Tabview mit Textfeldern zu haben, weil sich dann die UI des IB in rasanter Geschwindigkeit von unbedienbar in völlig unbedienbar wandelt

    Ich habe hier ein halbwegs komplexes Projekt, in dem ich genau das mache. Zugegeben, die Inhalte des Splitview stammen aus unterschiedlichen NIBs, deshalb muß ich innerhalb eines NIBs nur den Tabview bearbeiten.

    Ja, daran mit IB zu basteln ist nichts, was ich jemandem wünsche, aber mit der Listenansicht ist das durchaus handelbar. Und ich erspare mir eben genau den Mist wenn nichts ausgewählt ist.

    Und zu dem Witz fällt mir ein, wenn Ihr mal echt lachen wollt gebt "Don't ask me why" oder "Stupid Microsoft" oder sowas bei Google Codesearch ein. Da gibt es echte Schätze.

    Mein Liebling allerdings

    Quellcode

    1. DoTheRightThing = 0
    aus QuickTime/Movies.h
    und

    Quellcode

    1. * inOptions:
    2. * Currently unused. Pass 0 or face the consequences.

    aus /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ HIToolbox.framework/Versions/A/Headers/CarbonEvents.h
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • Original von Tom9811
    Äh, behaves as intended?
    In einem (readonly) NSTextField wird ein Datum angezeigt. Falls das zu zeigende Datum nil ist soll das TextField einen beliebigen String anzeigen.


    Kannst du mir mal genau erklären, wann das Datum sichtbar sein soll und wann nicht?


    Falls es ein Datum zum Anzeigen gibt soll es angezeigt werden und falls es keines gibt - weil der entsprechende Wert nil ist soll "Noch nicht gelernt" angezeigt werden und falls es keine selection gibt soll "keine selection" angezeigt werden.
    Die Objective-Cloud ist fertig wenn sie fertig ist. Beta heißt Beta.

    Objective-C und Cocoa Band 2: Fortgeschrittene
    Cocoa/Objective-C Seminare von [co coa:ding].
  • Nun ja, auch das kannst du entsprechend binden. Bedenke, dass es die Status-Bindings mehrfach gibt.

    "No Selection":
    = verstecken, wenn Selektion (synonym für selektion ist canRemove)
    = angezeigt, wenn keine Selektion
    canRemove

    Datumsanzeige:
    = versteckt, wenn keine Selektion ODER kein Datum
    = angezeigt, wenn Selektion UND ein Datum (Ersten Teil kann man sich mutmaßlich sparen, nil nimmt jeden Schlüssel)
    Not(canRemove) + IsNil(date)

    "Ungelernt"
    = versteckt, wenn keine Selektion ODER ein Datum
    = angezeigt, wenn Selektion UND kein Datum
    Not(canRemove) + IsNotNil(Date)

    Oder so ähnlich
    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"?