作者:eyd zxjd
鏈接:https://www.zhihu.com/question/30678288/answer/80664546
來源:知乎
#import "ViewController.h"
@implementation ViewController
#pragma mark 編寫Mac程序和iOS程序主要的不同
- (void)viewDidLoad {
[super viewDidLoad];
#pragma mark 坐標(biāo)系不同
#pragma mark 缺少一些組合方法
//iOS是在OS X系統(tǒng)的基礎(chǔ)上開發(fā)的,所以有很多更方便的地方,但Mac的框架不提供!
//比如,iOS中有一些常用的方法,Mac中沒有,比如
//iOS中UIButton 有addTarget:<#(id)#> action:<#(SEL)#> forControlEvents:<#(UIControlEvents)#>方法,但NSButton只能一項(xiàng)的設(shè)置
/**如果Mac里沒有某個(gè)組合的方法,可以試試拆開用!**/
NSButton *button=[[NSButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
button.target=self;
button.action=@selector(click);
[self.view addSubview:button];
#pragma mark 沒有Label控件
//Label控件是用TextFiled實(shí)現(xiàn)的
//label.enabled=NO;
//label.bordered=NO;
//label.selectable=YES;
#pragma mark 沒有bounds,center
#pragma mark NSView沒有背景顏色,但NSClipView和其它有些控件有
[self.view setWantsLayer:YES];
[self.view.layer setBackgroundColor:[NSColor blueColor].CGColor];
#pragma mark imagename方法只適用于圖片文件在包里
//根據(jù)路徑獲取圖片[[NSImage alloc]initByReferencingFile:@"/Users/guodong/Desktop/Coding/mac/mac/636b17fb1f.png"];
#pragma mark ImageView可以設(shè)定animates editable屬性
//可以播放動(dòng)圖,可以刪除,可以拖放圖片上去
#pragma mark NSColorWell enable=yes 可以調(diào)色
#pragma mark NSScrollView默認(rèn)不接受鼠標(biāo)事件,用sv.contentView.frame調(diào)整內(nèi)容視圖的位置和大小
#pragma mark NSWindow
//Mac程序是可以有多個(gè)window的!
//設(shè)置當(dāng)前的主窗口
NSApplication *app=[NSApplication sharedApplication];//獲取程序?qū)ο?/p>
NSLog(@"%@",app.keyWindow);//keyWindow和mainWindow經(jīng)常是同一個(gè)window,它們?cè)诔绦騽偧虞d的時(shí)候是還沒加載的,所以不能在viewDidLoad方法中設(shè)置!當(dāng)app處于不活動(dòng)的狀態(tài)或不能接受鍵盤值時(shí),也可能是空的
NSLog(@"%@",app.mainWindow);
NSWindow *window=app.keyWindow;
window.alphaValue=1;//設(shè)置窗口的透明度
window.backgroundColor=[NSColor clearColor];//設(shè)置背景顏色為透明
[window setStyleMask:1];//設(shè)置窗口的風(fēng)格是沒有邊框的,也可以在故事板中的窗口屬性中調(diào)
[window setFrame:CGRectMake(100, 100, 500, 500) display:YES animate:YES];//移動(dòng)窗口,立即刷新,動(dòng)畫效果
//創(chuàng)建一個(gè)新的窗口,注意窗口控制器應(yīng)當(dāng)是個(gè)全局的指針,否則窗口會(huì)立即被銷毀!
NSWindow *new=[[NSWindow alloc]initWithContentRect:CGRectMake(100, 100, 300, 300) styleMask:1 backing:NSBackingStoreRetained defer:NO];
new.backgroundColor=[NSColor redColor];
NSWindowController *wc=[[NSWindowController alloc]initWithWindow:new];
[wc showWindow:new];
[new setLevel:10];//設(shè)置窗口顯示的優(yōu)先級(jí)
#pragma mark Mac開發(fā)中,cell十分常見
//大概是在OS X簡(jiǎn)化為iOS的過程中,很多控件被合并,簡(jiǎn)化了。
//OS X中很多控件都有(類型的后綴)為cell的子控件,通常能調(diào)整title什么的
//總之,大多數(shù)控件都是組合成的,而且子控件都暴露在外面,非常麻煩
#pragma mark NSOpenPanel 彈出選擇文件用的控件
NSOpenPanel *openPanel=[NSOpenPanel openPanel];//獲取NSOpenPanel對(duì)象
//設(shè)置
[openPanel setCanChooseFiles:YES];
[openPanel setCanChooseDirectories:YES];
//[openPanel setAllowedFileTypes:[NSArray arrayWithObject:(NSString *)kUTTypeDirectory]];
[openPanel setAllowedFileTypes:@[@"mp3"]];//允許的類型
[openPanel setDirectoryURL:[NSURL fileURLWithPath:@"/Users/guodong/Desktop/song"]];//設(shè)置默認(rèn)路徑
[openPanel setAllowsMultipleSelection:YES];//允許按住shift/command多選
[openPanel runModal];//顯示,并且返回結(jié)果 0取消了,1確認(rèn)了
if ([openPanel runModal] == NSModalResponseOK) {
NSURL *url = [openPanel URL];
NSLog(@"%@",[openPanel filenames]);
}
#pragma mark 打開文件/文件夾的操作
[[NSWorkspace sharedWorkspace]openFile:@"/Users/guodong/Desktop/Tools"];//用默認(rèn)的程序打開文件/文件夾
[[NSWorkspace sharedWorkspace]openFile:@"/Users/guodong/Desktop/首頁 - 知乎.html" withApplication:@"Xcode"];//用指定的程序打開
//NSWorkspace可以做一些設(shè)計(jì)到其他App的操作,比如獲取活動(dòng)的app列表,隱藏其他app等
[[NSDocumentController sharedDocumentController]openDocument:@"/Users/guodong/Desktop/Tools"];//NSDocument應(yīng)該是 蘋果提供的網(wǎng)絡(luò)同步功能用的 大概
#pragma mark NSTableView
//content Mode 這玩意在代碼中好像沒辦法設(shè)置? 設(shè)置Cell-Base/View-Base? (必須設(shè)置)
//純代碼創(chuàng)建Cell-Base? NSTableView
NSTableView *tableView;
tableView=[[NSTableView alloc]initWithFrame:CGRectMake(0, 0, 400, 300)];
tableView.delegate=nil;//代理
tableView.dataSource=nil;
//[tableView setAutosaveName:@"downloadTableView"];
//[tableView setAutoresizesSubviews:FULLSIZE];
//[tableView setBackgroundColor:[NSColor whiteColor]];
//[tableView setGridColor:[NSColor lightGrayColor]];
//[tableView setGridStyleMask: NSTableViewSolidHorizontalGridLineMask];
//[tableView setUsesAlternatingRowBackgroundColors:YES];
//[tableView setAutosaveTableColumns:YES];
//[tableView setAllowsEmptySelection:YES];
//[tableView setAllowsColumnSelection:YES];
NSScrollView *scrollView=[[NSScrollView alloc]initWithFrame:CGRectMake(0, 0, 400, 300)];
[scrollView setDocumentView:tableView];//設(shè)置內(nèi)容視圖
//[scrollView addSubview:tableView];雖然也能添加上,但是不能滑動(dòng)什么的
//[scrollView setBackgroundColor:[NSColor redColor]];
[self.view addSubview:scrollView];
//設(shè)定表頭
NSTableHeaderView *tableHeadView=[[NSTableHeaderView alloc] initWithFrame:CGRectMake(0, 0, 300, 20)];
[tableView setHeaderView:tableHeadView];
//以前不知道的。。。設(shè)定列,可以設(shè)定幾列,而且可調(diào)
NSTableColumn *column=[[NSTableColumn alloc] initWithIdentifier:@"column"];
[[column headerCell] setStringValue:@"column"];
//[[column headerCell] setAlignment:NSCenterTextAlignment];
[column setWidth:400];
[column setMinWidth:50];
[column setEditable:YES];
//[column setResizingMask:NSTableColumnAutoresizingMask | NSTableColumnUserResizingMask];
[tableView addTableColumn:column];
// Do any additional setup after loading the view.
/*創(chuàng)建Cell-Base NSTableView用的
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
return 100;
}
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
return @"ecwve";
}
*/
/*創(chuàng)建View-Base NSTableView用的,用代碼可能不行。。。
-(CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
NSLog(@"eww");
return 100;
}
-(NSView*)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
NSView *cellView=[[NSView alloc]initWithFrame:CGRectMake(0, 0, 100, 20)];
NSTextField *textField=[[NSTextField alloc]initWithFrame:CGRectMake(0, 0, 100, 20)];
[textField.cell setTitle:@"wcvc"];
[cellView addSubview:textField];
return cellView;
}
*/
// Do any additional setup after loading the view.
}
-(void)click
{
NSLog(@"click");
}
- (void)setRepresentedObject:(id)representedObject {
[super setRepresentedObject:representedObject];
// Update the view, if already loaded.
}
@end