Mac OS学习四:NSTableView
一,与UITableView的比较
1>,NSTableView没有section类,而是多了NSTableColumn这个类;
2>,NSTableView无法自身实现滚动,也就是说如果frame不够,超出的部分无法看到,要想实现滚动,需要NSScrollView这个Container来包裹它;
3>,在cell创建上,NSTableView代理中提供两种方法,一种是与IOS意义的base cell(基于NScell),一种是base view(基于NSview)
二,NSTableView的代码实现
NSTableView *tableview = [[NSTableView alloc] initWithFrame:CGRectMake(10, 10, self.view.frame.size.width - 20, self.view.frame.size.height - 20)];
[self.view addSubview:tableview];
这个时候tableview是没有效果的,就是加上背景颜色也没有,因为代码创建的tableview默认column是0,而storyboard创建初始column不为零,所以要手动创建NSTableColumn
NSTableColumn *column1 = [[NSTableColumn alloc] initWithIdentifier:@"columnFrist"];
[column1 setWidth:200];
[tableview addTableColumn:column1];//第一列
NSTableColumn * column2 = [[NSTableColumn alloc] initWithIdentifier:@"columnSecond"];
[column2 setWidth:200];
[tableview addTableColumn:column2];//第二列
设置tableview的代理和风格
tableview.focusRingType = NSFocusRingTypeNone; //tableview获得焦点时的风格
tableview.selectionHighlightStyle = NSTableViewSelectionHighlightStyleRegular;//行高亮的风格
tableview.headerView.frame = NSZeroRect; //表头
tableview.delegate = self;
tableview.dataSource = self;
接下来是tableview的代理方法解读
//返回行数
-(NSInteger) numberOfRowsInTableView:(NSTableView)tableView{
NSInteger rows;
//do something
return rows;
}
//每个单元内的view
-(NSView)tableView:(NSTableView)tableView viewForTableColumn:(NSTableColumn)tableColumn row:(NSInteger)row{
yourCustomCellViewcell = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
//do something
//cell.XX=XX;
return cell;
}
行高
-(CGFloat)tableView:(NSTableView)tableView heightOfRow:(NSInteger)row{ CGFloat height;
//do something
return height;
}
是否可以选中单元格
-(BOOL)tableView:(NSTableView)tableView shouldSelectRow:(NSInteger)row{ BOOL shouldSelectRow;
//do something
return shouldSelectRow;
}
选中的响应
-(void)tableViewSelectionDidChange:(nonnull NSNotification)notification{ NSTableView* tableView = notification.object;
//do something
}
如果想要实现tableview的滚动效果
NSScrollView *tableContainerView = [[NSScrollView alloc] initWithFrame:CGRectMake(10, 10, self.view.frame.size.width - 20, self.view.frame.size.height - 20)];
[tableContainerView setDocumentView:tableview];
[tableContainerView setDrawsBackground:NO]; //不画背景(背景默认画成白色)
[tableContainerView setHasVerticalScroller:YES]; //有垂直滚动条
//[_tableContainer setHasHorizontalScroller:YES]; //有水平滚动条
tableContainerView.autohidesScrollers = YES; //自动隐藏滚动条(滚动的时候出现)
个人整理总结,分享给大家,不喜勿喷,谢谢!!