Ich habe eine NSTextFieldCell, die ich mit mittlerer vertikaler Ausrichtung anzeigen möchte. Dank einer älteren Frage hier und einem Blogeintrag habe ich zwei funktionierende Lösungen.NSTextFieldCell vertikale Ausrichtung, Lösungen scheinen die horizontale Ausrichtung zu quetschen
Beide Lösungen scheinen jedoch meine Fähigkeit zu quetschen, die Zelle als rechtsbündig auszurichten. Kann mir jemand helfen, dass beide Lösungen beide Formen der Ausrichtung unterstützen? Hier
ist der Code für eine Lösung:
@implementation MiddleAlignedTextFieldCell
- (NSRect)titleRectForBounds:(NSRect)theRect {
NSRect titleFrame = [super titleRectForBounds:theRect];
NSSize titleSize = [[self attributedStringValue] size];
titleFrame.origin.y = theRect.origin.y - .5 + (theRect.size.height - titleSize.height)/2.0;
return titleFrame;
}
- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
NSRect titleRect = [self titleRectForBounds:cellFrame];
[[self attributedStringValue] drawInRect:titleRect];
}
@end
Die alternative Lösung ist (von this blog erhalten):
@implementation RSVerticallyCenteredTextFieldCell
- (NSRect)drawingRectForBounds:(NSRect)theRect
{
NSRect newRect = [super drawingRectForBounds:theRect];
if (mIsEditingOrSelecting == NO)
{
// Get our ideal size for current text
NSSize textSize = [self cellSizeForBounds:theRect];
// Center that in the proposed rect
float heightDelta = newRect.size.height - textSize.height;
if (heightDelta > 0)
{
newRect.size.height -= heightDelta;
newRect.origin.y += (heightDelta/2);
}
}
return newRect;
}
- (void)selectWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject start:(int)selStart length:(int)selLength
{
aRect = [self drawingRectForBounds:aRect];
mIsEditingOrSelecting = YES;
[super selectWithFrame:aRect inView:controlView editor:textObj delegate:anObject start:selStart length:selLength];
mIsEditingOrSelecting = NO;
}
- (void)editWithFrame:(NSRect)aRect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)anObject event:(NSEvent *)theEvent
{
aRect = [self drawingRectForBounds:aRect];
mIsEditingOrSelecting = YES;
[super editWithFrame:aRect inView:controlView editor:textObj delegate:anObject event:theEvent];
mIsEditingOrSelecting = NO;
}
@end
Das erfordert, dass ich in diesem Teil der Präsentation mit meiner Datenschicht koppeln, und ehrlich gesagt bin ich mir nicht sicher, dass ich das mag. Dies sollte die in IB vorgestellten Optionen respektieren, aber aus einigen Gründen nicht (in diesem Sinne sollte die vertikale Ausrichtung auch eine Option in IB sein). –
Ich bin mir nicht sicher, wie es das Ganze mischt, anstatt die Zeichenfolge von NSTextFieldCell auf etwas aus Ihrer Model-Ebene zu setzen.:-) Ausrichtung (und Schriftart, und Farbe und Größe, ...) ist ein Teil von allem. Ich stimme jedoch zu, dass die vertikale Ausrichtung eine Option sein sollte - einen Erweiterungsbericht einreichen. Da es nicht verfügbar ist, müssen Sie es im Zeichencode berücksichtigen. –
Äh, das ist "Verbesserungsanfrage". Link: http://bugreporter.apple.com –