Mac OS学习四:NSTableView

作者: 简鱼7819 | 来源:发表于2017-03-28 16:45 被阅读265次

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

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

    相关文章

      网友评论

      • 九剑仙:cell不重用怎么办
        简鱼7819:不知道你那边具体什么原因
        NSString *strIdt=[tableColumn identifier];
        NSTableCellView *aView = [tableView makeViewWithIdentifier:strIdt owner:self];
      • aaa000:NSTableView 可以实现QQ那样的分组效果吗?
        简鱼7819:已经可以实现的,不过macOS的框架提供的UIKit接口直接实现不可能,需要你自己封装实现。
      • 萤火虫mimu:加油。很稀饭

      本文标题:Mac OS学习四:NSTableView

      本文链接:https://www.haomeiwen.com/subject/imgjottx.html