Mac OS X 软件开发MacOS开发 技术集锦iOS开发

Mac OS学习四:NSTableView

2017-03-28  本文已影响265人  简鱼7819

一,与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;      //自动隐藏滚动条(滚动的时候出现)

个人整理总结,分享给大家,不喜勿喷,谢谢!!

上一篇下一篇

猜你喜欢

热点阅读