Ändern der Höhe von NSSearchField

8

Ich habe momentan einen Standard NSSearchField (in einer Nib). Die Höhe wird von Apple bei 22px festgelegt. Die Anwendung unterstützt oder verwendet tibetischen Unicode. Tibetische Zeichen werden von links nach rechts geschrieben, aber bestimmte benachbarte Zeichen werden vertikal gestapelt, was zu einer ungewöhnlich großen Zeilenhöhe führt. Text, der in das Suchfeld eingegeben wurde, wird abgeschnitten. Meine Lösung ist die Unterklasse NSSearchFieldCell und wenn nötig NSSearchField .

Erstes Problem: Es ist schwer herauszufinden, welche Methoden überschrieben werden sollen. Ich finde Hinweise in der Apple-Dokumentation, aber nichts systematisches. Alle Zeiger sind willkommen.

Was ich bisher habe: Ich habe NSSearchFieldCell subclasiert. Ich habe searchTextRectForBounds , cancelButtonRectForBounds , searchButtonRectForBounds und schließlich drawWithFrame inView ersetzt.

Ich bekomme ein anständiges grafisches Bild in der gewünschten Größe. Der Cancel-Button wird am erwarteten Ort gezeichnet, aber ich habe keine Ahnung, wo die Cancel-Buttons auf dem Bildschirm sind.

Welche anderen Methoden muss ich außer Kraft setzen?

Um das Problem zu veranschaulichen, der folgende Text ཀླུའ ི་ རྒྱལ་པོ་

transliteriert in lateinische / römische Buchstaben klu'i rgyal po in der Suchleiste des Finders. Beachten Sie, dass das Gigu "U" am unteren Rand abgeschnitten ist.

    
Bill 07.04.2014, 03:09
quelle

3 Antworten

3
___ qstnhdr ___ Ändern der Höhe von NSSearchField ___ tag123objectivec ___ Dieses Tag sollte nur bei Fragen verwendet werden, die sich auf Objective-C-Funktionen beziehen oder von Code in der Sprache abhängen. Die Tags [Kakao] und [Kakao-Touch] sollten verwendet werden, um nach Frameworks oder Klassen von Apple zu fragen. Verwenden Sie die zugehörigen Tags [ios], [macos], [apple-watch] und [tvos] für Probleme, die für diese Plattformen spezifisch sind. ___ answer22952666 ___

Sie müssen eine benutzerdefinierte NSSearchFieldCell-Unterklasse erstellen und drawWithFrame: überschreiben, und dann Ihr NSSearchField auf die Verwendung dieser Zelle einstellen. Sie können Ihren benutzerdefinierten Rahmen entweder in Code zeichnen oder Endkappenbilder und ein Hintergrundbild für den Mittelpunkt verwenden, den Sie horizontal kacheln. (Ich habe das nicht versucht)

Probieren Sie das aus.

Alternativ erstellen Sie einfach ein NSTextFeil, und aktualisieren Sie dann die Ansicht.

    
___ antwort22952679 ___

Ich würde diese Straße überhaupt nicht gehen. Stattdessen sollten Sie NSView ableiten und ein NSTextField + NSPopUpButton + NSButton darin stecken.

Mit einem Haufen Hacking wird es funktionieren, aber dann wird OS X 10.10 ausgeliefert und es wird kaputt gehen.

    
___ answer23099942 ___

Was ich getan habe:
(Der Endbenutzer scheint zumindest jetzt mit dieser Lösung zufrieden zu sein.) Ich stimme den NSSearchField-Text, so wie er eingegeben wurde, in ein Textfeld in einem NSP-Kopierer zurück. Ich habe ein transientes Popover von einer separaten Feder erstellt und behalte es bei mir. Dann habe ich in der an die Suchleiste gebundenen IBAction den folgenden Code hinzugefügt:

%Vor%

}

Ein Problem bei Popover-Spielen besteht darin, dass sie beim Anzeigen als Erstes angezeigt werden. Ich habe auf die Antwort dieser Frage verwiesen: show-nspopover-without-Focus . Es ist wichtig, den ersten Responder dem Suchfeld zuzuweisen, bevor Sie den Text bearbeiten / wiederherstellen.

    
___ tag123cocoa ___ Cocoa ist Apples Entwicklungsumgebung für MacOS, bestehend aus Foundation, Application Kit und Core Data. Verwenden Sie den "Kakao-Touch" -Tag für iOS-Fragen. ___ qstntxt ___

Ich habe momentan einen Standard %code% (in einer Nib). Die Höhe wird von Apple bei 22px festgelegt. Die Anwendung unterstützt oder verwendet tibetischen Unicode. Tibetische Zeichen werden von links nach rechts geschrieben, aber bestimmte benachbarte Zeichen werden vertikal gestapelt, was zu einer ungewöhnlich großen Zeilenhöhe führt. Text, der in das Suchfeld eingegeben wurde, wird abgeschnitten. Meine Lösung ist die Unterklasse %code% und wenn nötig %code% .

Erstes Problem: Es ist schwer herauszufinden, welche Methoden überschrieben werden sollen. Ich finde Hinweise in der Apple-Dokumentation, aber nichts systematisches. Alle Zeiger sind willkommen.

Was ich bisher habe: Ich habe %code% subclasiert. Ich habe %code% , %code% , %code% und schließlich %code% ersetzt.

Ich bekomme ein anständiges grafisches Bild in der gewünschten Größe. Der Cancel-Button wird am erwarteten Ort gezeichnet, aber ich habe keine Ahnung, wo die Cancel-Buttons auf dem Bildschirm sind.

Welche anderen Methoden muss ich außer Kraft setzen?

Um das Problem zu veranschaulichen, der folgende Text ཀླུའ ི་ རྒྱལ་པོ་

transliteriert in lateinische / römische Buchstaben klu'i rgyal po in der Suchleiste des Finders. Beachten Sie, dass das Gigu "U" am unteren Rand abgeschnitten ist.

    
___
Abhi Beckert 09.04.2014, 04:16
quelle
2

Sie müssen eine benutzerdefinierte NSSearchFieldCell-Unterklasse erstellen und drawWithFrame: überschreiben, und dann Ihr NSSearchField auf die Verwendung dieser Zelle einstellen. Sie können Ihren benutzerdefinierten Rahmen entweder in Code zeichnen oder Endkappenbilder und ein Hintergrundbild für den Mittelpunkt verwenden, den Sie horizontal kacheln. (Ich habe das nicht versucht)

Probieren Sie das aus.

Alternativ erstellen Sie einfach ein NSTextFeil, und aktualisieren Sie dann die Ansicht.

    
MrHaze 09.04.2014 04:14
quelle
0

Was ich getan habe:
(Der Endbenutzer scheint zumindest jetzt mit dieser Lösung zufrieden zu sein.) Ich stimme den NSSearchField-Text, so wie er eingegeben wurde, in ein Textfeld in einem NSP-Kopierer zurück. Ich habe ein transientes Popover von einer separaten Feder erstellt und behalte es bei mir. Dann habe ich in der an die Suchleiste gebundenen IBAction den folgenden Code hinzugefügt:

%Vor%

}

Ein Problem bei Popover-Spielen besteht darin, dass sie beim Anzeigen als Erstes angezeigt werden. Ich habe auf die Antwort dieser Frage verwiesen: show-nspopover-without-Focus . Es ist wichtig, den ersten Responder dem Suchfeld zuzuweisen, bevor Sie den Text bearbeiten / wiederherstellen.

    
Bill 16.04.2014 04:23
quelle

Tags und Links