前提
昨天有個同事問我怎么像系統那樣,點擊文件選擇重命名以后,文件名只選中前半部分,不選中文件格式,我中午弄了好久還是不會,找了一些方法不行,后面問了個大神,用cell
實現,代碼是這樣的:
#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
這樣就可以實現了。效果如下:
效果
調用就是這樣咯:
[self.textfield setStringValue:@"測試中文 ABC123"];
[self.textfield selectTextRange:NSMakeRange(0, 4)];
------------------------分割線------------------------
但是呢,我對我自己之前研究了半天的方法還是不死心,所以我就又和另一個大神討論了下,然后也終于實現了,代碼如下:
- (void)viewDidLoad {
[super viewDidLoad];
NSString* fileName = @"wome.womenshigewefnjian.pdf";
[_shishi setStringValue:fileName];
// NSMutableString *st = [NSMutableString stringWithFormat:@"%@",fileName];
//把最后一個“.”之前的字符串拿出來
// _range = [st rangeOfString:@"." options:NSBackwardsSearch];
// NSString *str = [st substringToIndex:_range.location];
//設置為不可選,不然一開始運行就會全部選中
[_shishi setSelectable:NO];
}
/**
按鈕的點擊方法
@param sender nil
*/
- (IBAction)dianji:(id)sender {
//設置為可選
[_shishi setSelectable:YES];
//這句話的意思是使之成為可編輯狀態
[_shishi selectText:self];
/**
需要選中的字符串,這個方法必須在可編輯狀態下可用,之前就只是設置了使之成為焦點,并不行,后面大神告訴我必須要是可編輯狀態
@param 0 起始位置
@param 4 結束位置
@return void
*/
[[_shishi currentEditor] setSelectedRange: NSMakeRange(0, 4)];
}
效果如下:
效果
那個
range
你可以傳其他的,滿足你的需求就好。
總結
關于Mac OS X開發的資料比較少,我就把平時遇到的記錄下來,就當做自己的筆記,以后也就好找了。上面是兩種方法實現。