前提
昨天有個(gè)同事問我怎么像系統(tǒng)那樣,點(diǎn)擊文件選擇重命名以后,文件名只選中前半部分,不選中文件格式,我中午弄了好久還是不會(huì),找了一些方法不行,后面問了個(gè)大神,用cell實(shí)現(xiàn),代碼是這樣的:
#import "NSTextField+hh.h"
@implementation NSTextField (hh)
-(void)selectTextRange:(NSRange)range
{
NSText *textEditor = [self.window fieldEditor:YES forObject:self];
if (textEditor) {
id cell = [self selectedCell];
[cell selectWithFrame:self.bounds
inView:self
editor:textEditor
delegate:self
start:range.location
length:range.length];
}
}
@end
這樣就可以實(shí)現(xiàn)了。效果如下:

效果
調(diào)用就是這樣咯:
[self.textfield setStringValue:@"測試中文 ABC123"];
[self.textfield selectTextRange:NSMakeRange(0, 4)];
------------------------分割線------------------------
但是呢,我對(duì)我自己之前研究了半天的方法還是不死心,所以我就又和另一個(gè)大神討論了下,然后也終于實(shí)現(xiàn)了,代碼如下:
- (void)viewDidLoad {
[super viewDidLoad];
NSString* fileName = @"wome.womenshigewefnjian.pdf";
[_shishi setStringValue:fileName];
// NSMutableString *st = [NSMutableString stringWithFormat:@"%@",fileName];
//把最后一個(gè)“.”之前的字符串拿出來
// _range = [st rangeOfString:@"." options:NSBackwardsSearch];
// NSString *str = [st substringToIndex:_range.location];
//設(shè)置為不可選,不然一開始運(yùn)行就會(huì)全部選中
[_shishi setSelectable:NO];
}
/**
按鈕的點(diǎn)擊方法
@param sender nil
*/
- (IBAction)dianji:(id)sender {
//設(shè)置為可選
[_shishi setSelectable:YES];
//這句話的意思是使之成為可編輯狀態(tài)
[_shishi selectText:self];
/**
需要選中的字符串,這個(gè)方法必須在可編輯狀態(tài)下可用,之前就只是設(shè)置了使之成為焦點(diǎn),并不行,后面大神告訴我必須要是可編輯狀態(tài)
@param 0 起始位置
@param 4 結(jié)束位置
@return void
*/
[[_shishi currentEditor] setSelectedRange: NSMakeRange(0, 4)];
}
效果如下:

效果
那個(gè)
range你可以傳其他的,滿足你的需求就好。
總結(jié)
關(guān)于Mac OS X開發(fā)的資料比較少,我就把平時(shí)遇到的記錄下來,就當(dāng)做自己的筆記,以后也就好找了。上面是兩種方法實(shí)現(xiàn)。