MacOS 开发

来源:互联网 发布:犀牛软件版本分析 编辑:程序博客网 时间:2024/06/05 18:43

关键词:MacOS 开发 , NSTextField,doCommandBySelector,isValidObject,NSControlSubclassNotifications,NSControlTextEditingDelegate,label

  • 创建
  • 特殊的 NSTextField Label
  • NSControlSubclassNotifications
  • NSControlTextEditingDelegate
  • 自定义光标等
    • 1需要创建继承自 NSSearchFieldCell 的子类修改某些方法
    • 2需要创建继承自 NSSearchField 的子类实现下面方法来修改cell即可
  • 参考资料


创建

  • 比起 UITextField 可以输入多行
- (void)addTextField{    NSTextField *field0 = [[NSTextField alloc]initWithFrame:NSMakeRect(100, 100, 100, 100)];    [self.window.contentView addSubview:field0];    field0.backgroundColor = [NSColor cyanColor];    field0.textColor = [NSColor magentaColor];    field0.bordered = NO;//无边框    field0.delegate = self;}

NSTextField


特殊的 NSTextField – Label

文章请戳这里:
http://blog.csdn.net/lovechris00/article/details/77977541


NSControlSubclassNotifications

  • 这里的三个方法,跟 UITextField 代理中常用的三个方法。不用同意代理就可以执行,这个挺好:
#pragma mark - NSControlSubclassNotifications- (void)controlTextDidBeginEditing:(NSNotification *)obj {    NSTextField *field = obj.object;    NSLog(@"controlTextDidBeginEditing : %@",field.stringValue);}- (void)controlTextDidEndEditing:(NSNotification *)obj {    NSTextField *field = obj.object;    NSLog(@"controlTextDidEndEditing : %@",field.stringValue);}- (void)controlTextDidChange:(NSNotification *)obj {    NSTextField *field = obj.object;    NSLog(@"controlTextDidChange : %@",field.stringValue);}

NSControlTextEditingDelegate

#pragma mark - NSControlTextEditingDelegate//点击 field 并准备输入第一个字母时。- (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor{    return YES;}//不再填写这个 field(如:去填写另外一个 field 的时)调用。如果文字没有改变,就不会调用。- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor{    return YES;}//输入文字后,在 EndEditing 之前调用。如果文字没有改变,就不会调用。//返回 NO 时,这个窗口不会响应其他的点击事件(不能去填别的)。- (BOOL)control:(NSControl *)control isValidObject:(nullable id)obj{    return YES;}//被其他方法调用时,如:点击 delete 按钮,commandSelector 为 deleteBackward:. tab:insertTab: 。//返回 YES 时,delete、tab 这些方法调用失败。所以需要返回 NO。- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector{    return YES;}- (BOOL)control:(NSControl *)control didFailToFormatString:(NSString *)string errorDescription:(nullable NSString *)error{    return YES;}- (void)control:(NSControl *)control didFailToValidatePartialString:(NSString *)string errorDescription:(nullable NSString *)error{    NSLog(@"didFailToValidatePartialString : %@",string);}- (NSArray<NSString *> *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray<NSString *> *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index{    NSLog(@"completions : %@",words);    return words;}

其实,我不知道最后三个方法怎么用。。。。。


自定义光标等

方法一:
参考:http://blog.csdn.net/skynullcode/article/details/49963257

遍历NSSearchField的子视图(subviews), 取出_NSKeyboardFocusClipView类的对象,然后再取出里面的
NSTextView对象,调用setInsertionPointColor函数,传入想要的颜色,代码片段如下。

if (self.searchField.subviews.count) {    __block NSView *keyboardFocusClipView;    [self.searchField.subviews enumerateObjectsUsingBlock:^(id  obj,                                                            NSUInteger idx,                                                            BOOL *stop) {        //   NSClassFromString(@"_NSKeyboardFocusClipView");        if ([obj isKindOfClass:[NSClipView class]]) {            keyboardFocusClipView = obj;            *stop = YES;        }    }];    if (keyboardFocusClipView) {        NSView *view = keyboardFocusClipView.subviews[0];        [(NSTextView*)view setInsertionPointColor:cursorColor];    }}

方法二:
参考(内附demo):http://www.tanhao.me/pieces/1580.html/

1、需要创建继承自 NSSearchFieldCell 的子类,修改某些方法;

//通过代码实例化- (id)init{    self = [super init];    if (self)    {        [self setUp];    }    return self;}//通过xib实例化- (id)initWithCoder:(NSCoder *)aDecoder{    self = [super initWithCoder:aDecoder];    if (self)    {        [self setUp];    }    return self;}- (void)setUp{//可以写你需要的设置}//重写该方法实现对光标颜色的修改// NSSearchField获取焦点,要显示光标的时候,都会调用该方法。- (NSText *)setUpFieldEditorAttributes:(NSText *)textObj{    NSText *text = [super setUpFieldEditorAttributes:textObj];    [(NSTextView*)text setInsertionPointColor:[NSColor whiteColor]];    return text;}

2、需要创建继承自 NSSearchField 的子类,实现下面方法来修改cell即可。

+ (void)setCellClass:(Class)factoryId{    [super setCellClass:[THSearchFieldCell class]];}+ (Class)cellClass{    return [THSearchFieldCell class];}

参考资料

  • TH:自定义NSSearchFiled样式
    http://www.tanhao.me/pieces/1580.html/

原创粉丝点击