2012-04-18 238 views
18

我创建在其中,我创建NSTextField编程这样的可可应用程序,的NSTextField垂直对齐

NSView *superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 300, 1400, 500)]; 
NSTextField *myTextField = [[NSTextField alloc] initWithFrame:NSMakeRect(180, 100, 1000, 300)]; 
[myTextField setStringValue:myText]; 
[myTextField setEditable:NO]; 
[myTextField setBezeled:NO]; 
[myTextField setDrawsBackground:NO]; 
[myTextField setSelectable:NO]; 
[myTextField setFont:[NSFont fontWithName:@"Futura" size:22]]; 
[superView addSubview:myTextField]; 
[superView setAutoresizesSubviews:YES]; 
[myTextField setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; 
[self.window.contentView addSubview:superView]; 

现在我想我的文字的垂直对齐,并应根据文本长度可调。
任何人有任何建议吗?请分享你的建议:)

非常感谢.. !!

回答

11

你想要什么是可能的,但是你必须创建一个NSTextFieldCell的子类,然后在你的NSTextField中使用这个子类。你想覆盖的主要方法是drawingRectForBounds:selectWithFrame:editWithFrame:

Here is a blog post from the fantastic Daniel Jalkut此事,他甚至还包括一个可下载的版本准备就绪。该帖子相当老,但它应该仍然工作正常。

+0

谢谢sosborn .. !!让我试试这个..如果有任何问题,我会回复你。 :) – iUser 2012-04-18 08:21:14

+0

好吧,我有'RSVerticallyCenteredTextFieldCell.h'和'RSVerticallyCenteredTextFieldCell.m'类,但我不知道如何使用它,用我的'myTextField'。 – iUser 2012-04-18 08:50:26

+0

看看NSControl(从哪个NSTextField继承)。它有一个名为setCellClass的方法。 Apple的Control and Cell Programming Guide doc也很好阅读。 – sosborn 2012-04-18 08:57:05

1

要将文本字段调整为字符串大小,您必须在计算之前使用NSStringsizeWithFont: constrainedToSize: lineBreakMode:来计算文本大小,然后通过设置帧来调整文本字段的大小。

垂直对齐看这question(和答案)。

+1

@iUser询问NSTextField,它与UITextField不同。 NSTextField没有contentVerticalAlignment属性。 – sosborn 2012-04-18 08:08:03

+0

Thanx Kai .. !!我正在使用不提供'contentVerticalAlignment'选项的'NSTextField'。任何建议? – iUser 2012-04-18 08:09:31

+0

对不起。我刚刚改变了我的答案。 – 2012-04-18 08:17:08

-1

覆盖ViewWillDraw并将NSTextField放置在其父视图的中心。这也适用于实时调整大小。您也可以在此处调整字体大小以查找适合新尺寸的字体。

+0

解释您的downvote并注意到这是在2015年回答的。这与接受的答案类似,只是不是在NSTextFieldCell中创建自定义绘图,而是在NSTextField中执行此操作。 – 2017-07-03 14:28:54