[cocoa]Mac开发知识:NSButton使用及自定义/Safari调用/NSTextField

从IOS开发转到做Mac开发,新手一个,遇到的问题和解决办法做一下记录。

1.NSButton

1.1NSButton设置高亮效果

UIButton是可以在xib编辑页面直接设置高亮图片、或者通过代码针对不同state设置图片,对于NSButton需要将type改为NSMomentaryChangeButton,再对alternateImage赋值修改高亮图片。

1.2NSButton修改title颜色  

NSButton在xib中是不能修改title字体颜色的,需要对NSButton的`attributedTitle`进行赋值  

+ (void)setButtonAlternateTitleColor:(NSButton *)button andColor:(NSColor *)color fontSize:(int)fontSize{
    if (color == nil) {
        color = [NSColor whiteColor];
    }
    NSFont *font = [NSFont systemFontOfSize:fontSize];
    NSDictionary * attrs = [NSDictionary dictionaryWithObjectsAndKeys:font,
                            NSFontAttributeName,
                            color,
                            NSForegroundColorAttributeName,
                            nil];
    
    NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:[button alternateTitle] attributes:attrs];
    [button setAttributedAlternateTitle:attributedString];
    
}

1.3自定义button相应mouseUp、mouseDown、mouseDragged事件

因为需要制作一个浮动菜单按钮,鼠标可以拖动、完成拖动后自动靠边。所以需要一个button控件类似于UIButton的不同相应。而NSbutton是只有action事件的,所以需要自定义一个。

 从NSView继承,然后需要重写mouseUp、mouseDown、MouseDragged事件。其中可以从NSEvent中获取当前光标位置,用来调整button在鼠标拖动过程中的相应位置。具体做法如下:

a.mouseDown 记录光标在屏幕上的point,计算出于button的origin的偏差,作为光标移动中调整button位置的一个相对变量;

b.mouseDragged 记录光标在屏幕上的point,结合在步骤a中记录的偏差值,可以跟随光标设置button的origin;

c.mouseUp 记录光标在屏幕上的point,判断当前button位于屏幕的那个象限,调整origin实现靠边。

@interface MenuButton : NSView

@end

@implementation MenuButton
#pragma mark - mouse action
- (void)mouseDown:(NSEvent *)theEvent{
    

    NSPoint touchPoint =theEvent.locationInWindow;


}
- (void)mouseUp:(NSEvent *)theEvent{

	NSPoint point =theEvent.locationInWindow;
}

- (void)mouseDragged:(NSEvent *)theEvent{
    
    NSPoint point =theEvent.locationInWindow;


}
@end

 

2.调用Safari  

[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://www.google.com/"]];

3.NSTextField

3.1 xib中添加NSTextField取消选中边框高亮,在属性中将 Focus Ring 设置为 None。

你可能感兴趣的:(cocoa,mac,Safari,NSTextField,NSButton)