今年三月份哄孤,進(jìn)入Coacoa OS 開發(fā) ,現(xiàn)在算來(lái)已有半年。Mac 開發(fā)最讓人煩躁的還是UI問題瘦陈,如果手寫代碼,那你的效率將會(huì)變得非常低晨逝,所以xib在Mac OS開發(fā)中還是很重要的。然而咏花,在使用NSTextField過程中你會(huì)發(fā)現(xiàn)一旦你設(shè)置其高度大于24阀趴,就會(huì)出現(xiàn)文字不居中的問題,本文主要解決的就是文本不居中的問題刘急。
首先,自己定義一個(gè)繼承NSTextFieldCell的類叔汁,命名為QYTextFiledCellCenter。實(shí)現(xiàn)代碼如下:
#import <Cocoa/Cocoa.h>
@interface QYTextFiledCellCenter : NSTextFieldCell
//編輯狀態(tài)先設(shè)置文本的Y坐標(biāo)
@property (nonatomic) IBInspectable CGFloat oringeY;
@end
上面是.h文件据块。下面的是.m的文件實(shí)現(xiàn):
#import "QYTextFiledCellCenter.h"
@implementation QYTextFiledCellCenter
- (NSRect)titleRectForBounds:(NSRect)rect{
NSRect titleRect = [super titleRectForBounds:rect];
CGFloat minimHeight = self.cellSize.height;
titleRect.origin.y += (titleRect.size.height - minimHeight)/2;
titleRect.size.height = minimHeight;
return titleRect;
}
-(void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView{
[super drawWithFrame:cellFrame inView:controlView];
}
-(void)selectWithFrame:(NSRect)rect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)delegate start:(NSInteger)selStart length:(NSInteger)selLength{
CGRect titleRect = [self titleRectForBounds:rect];
titleRect.origin.y += self.oringeY;
[super selectWithFrame:titleRect inView:controlView editor:textObj delegate:delegate start:selStart length:selLength];
NSLog(@"titleRect = %@",NSStringFromRect(titleRect));
}
@end
解釋一下:上面的兩個(gè)方法中
- (NSRect)titleRectForBounds:(NSRect)rect
是text-type Cell類型所調(diào)用的函數(shù)折剃,這個(gè)函數(shù)主要的作用就是調(diào)整文本信息被描繪的位置,這里我們?cè)O(shè)置了居中怕犁。
-(void)selectWithFrame:(NSRect)rect inView:(NSView *)controlView editor:(NSText *)textObj delegate:(id)delegate start:(NSInteger)selStart length:(NSInteger)selLength
最后,用圖片演示一下如何在xib中使用奏甫,選中xib中的一個(gè)label打開右邊的inspector 欄,選擇第三個(gè)按鈕(identify inspector),然后再Custom Class 一欄填寫QYTextFiledCellCenter 圖片如下: