macOS开发之NSTableView的应用详解(三)

简介: macOS开发之NSTableView的应用详解

九、NSTableView中常用的属性和方法


//初始化方法

- (instancetype)initWithFrame:(NSRect)frameRect;

- (nullable instancetype)initWithCoder:(NSCoder *)coder;


//设置代理

@property (nullable, weak) id <NSTableViewDataSource> dataSource;

@property (nullable, weak) id <NSTableViewDelegate> delegate;


//设置TableView的头视图 会被列头图就行覆盖

@property (nullable, strong) NSTableHeaderView *headerView;

//设置头图右侧视图 可以自定义图标

@property (nullable, strong) NSView *cornerView;

//设置是否允许列拖拽排序

@property BOOL allowsColumnReordering;

//设置是否允许调整列宽度

@property BOOL allowsColumnResizing;

//调整列宽度的风格

/*

typedef NS_ENUM(NSUInteger, NSTableViewColumnAutoresizingStyle) {

   //不可调整

   NSTableViewNoColumnAutoresizing = 0,

   //平分

   NSTableViewUniformColumnAutoresizingStyle,

   //从后往前调整

   NSTableViewSequentialColumnAutoresizingStyle,  

   //从前往后调整

   NSTableViewReverseSequentialColumnAutoresizingStyle,

   //最后一列可调整

   NSTableViewLastColumnOnlyAutoresizingStyle,

   //第一列可调整

   NSTableViewFirstColumnOnlyAutoresizingStyle

};

*/

@property NSTableViewColumnAutoresizingStyle columnAutoresizingStyle;

//设置分割线风格

/*

typedef NS_OPTIONS(NSUInteger, NSTableViewGridLineStyle) {

   //无分割线

   NSTableViewGridNone                    = 0,

   //竖直分割线

   NSTableViewSolidVerticalGridLineMask   = 1 << 0,

   //水平分割线

   NSTableViewSolidHorizontalGridLineMask = 1 << 1,

   //水平虚线分割线

   NSTableViewDashedHorizontalGridLineMask ,

};

*/

@property NSTableViewGridLineStyle gridStyleMask;

//设置cell之间的间隔 需要设置为NSSize对象

@property NSSize intercellSpacing;

//是否开启斑马纹

@property BOOL usesAlternatingRowBackgroundColors;

//背景色

@property (copy) NSColor *backgroundColor;

//设置分割线颜色

@property (copy) NSColor *gridColor;

//设置行尺寸风格

/*

typedef NS_ENUM(NSInteger, NSTableViewRowSizeStyle) {

   //默认

   NSTableViewRowSizeStyleDefault = -1,

   //自定义

   NSTableViewRowSizeStyleCustom = 0,

   //小尺寸风格

   NSTableViewRowSizeStyleSmall = 1,

   //中等尺寸风格

   NSTableViewRowSizeStyleMedium = 2,

   //大尺寸风格

   NSTableViewRowSizeStyleLarge = 3,

} NS_ENUM_AVAILABLE_MAC(10_7);

*/

@property NSTableViewRowSizeStyle rowSizeStyle;

//行高

@property CGFloat rowHeight;

//获取所有列对象

@property (readonly, copy) NSArray<NSTableColumn *> *tableColumns;

//获取列数

@property (readonly) NSInteger numberOfColumns;

//获取行数

@property (readonly) NSInteger numberOfRows;

//添加一列

- (void)addTableColumn:(NSTableColumn *)tableColumn;

//移除一列

- (void)removeTableColumn:(NSTableColumn *)tableColumn;

//移动列

- (void)moveColumn:(NSInteger)oldIndex toColumn:(NSInteger)newIndex;

//根据id获取列的下标

- (NSInteger)columnWithIdentifier:(NSString *)identifier;

//根据id获取列对象

- (nullable NSTableColumn *)tableColumnWithIdentifier:(NSString *)identifier;

//滚动到指定行可见

- (void)scrollRowToVisible:(NSInteger)row;

//滚动到指定列可见

- (void)scrollColumnToVisible:(NSInteger)column;

//重新加载数据

- (void)reloadData;

//重新加载指定位置的数据

- (void)reloadDataForRowIndexes:(NSIndexSet *)rowIndexes columnIndexes:(NSIndexSet *)columnIndexes;

//获取编辑的列

@property (readonly) NSInteger editedColumn;

//获取编辑的行

@property (readonly) NSInteger editedRow;

//获取点击的列

@property (readonly) NSInteger clickedColumn;

//获取点击的行

@property (readonly) NSInteger clickedRow;

//设置列头提示图片

- (void)setIndicatorImage:(nullable NSImage *)image inTableColumn:(NSTableColumn *)tableColumn;

//获取列头提示图片

- (nullable NSImage *)indicatorImageInTableColumn:(NSTableColumn *)tableColumn;


//下面这些方法与列表拖拽有关

@property BOOL verticalMotionCanBeginDrag;

- (BOOL)canDragRowsWithIndexes:(NSIndexSet *)rowIndexes atPoint:(NSPoint)mouseDownPoint;

- (NSImage *)dragImageForRowsWithIndexes:(NSIndexSet *)dragRows tableColumns:(NSArray<NSTableColumn *> *)tableColumns event:(NSEvent *)dragEvent offset:(NSPointPointer)dragImageOffset;

- (void)setDraggingSourceOperationMask:(NSDragOperation)mask forLocal:(BOOL)isLocal;

- (void)setDropRow:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation;


//下面这些方法与列表选中有关

//是否支持多选

@property BOOL allowsMultipleSelection;

//是否允许都不选中

@property BOOL allowsEmptySelection;

//是否支持选中列 如果设置为YES 点击列头会将整列选中

@property BOOL allowsColumnSelection;

//全选 用于子类重写

- (void)selectAll:(nullable id)sender;

//全不选 用于子类重写

- (void)deselectAll:(nullable id)sender;

//进行列选中

- (void)selectColumnIndexes:(NSIndexSet *)indexes byExtendingSelection:(BOOL)extend;

//进行行选中

- (void)selectRowIndexes:(NSIndexSet *)indexes byExtendingSelection:(BOOL)extend;

//获取所有选中列index

@property (readonly, copy) NSIndexSet *selectedColumnIndexes;

//获取所有选中行index

@property (readonly, copy) NSIndexSet *selectedRowIndexes;

//取消某列的选中

- (void)deselectColumn:(NSInteger)column;

//取消某行的选中

- (void)deselectRow:(NSInteger)row;

//判断某列是否被选中

- (BOOL)isColumnSelected:(NSInteger)column;

//判断某行是否被选中

- (BOOL)isRowSelected:(NSInteger)row;

//获取选中的列数

@property (readonly) NSInteger numberOfSelectedColumns;

//获取选中的行数

@property (readonly) NSInteger numberOfSelectedRows;

//获取某列的位置尺寸

- (NSRect)rectOfColumn:(NSInteger)column;

//获取某行的位置尺寸

- (NSRect)rectOfRow:(NSInteger)row;

//获取某个范围内的列

- (NSIndexSet *)columnIndexesInRect:(NSRect)rect;

//获取某个范围内的行

- (NSRange)rowsInRect:(NSRect)rect;

//获取包含某个点的列

- (NSInteger)columnAtPoint:(NSPoint)point;

//获取包含某个点的行

- (NSInteger)rowAtPoint:(NSPoint)point;

//获取某个cell的位置尺寸

- (NSRect)frameOfCellAtColumn:(NSInteger)column row:(NSInteger)row;

//获取某个位置的View,用于view-base

- (nullable __kindof NSView *)viewAtColumn:(NSInteger)column row:(NSInteger)row makeIfNecessary:(BOOL)makeIfNecessary;

//获取某行的视图 用于view-base

- (nullable __kindof NSTableRowView *)rowViewAtRow:(NSInteger)row makeIfNecessary:(BOOL)makeIfNecessary;

//获取某个View所在的行 用于view-base

- (NSInteger)rowForView:(NSView *)view;

//获取某个View所在的列 用于view-base

- (NSInteger)columnForView:(NSView *)view;

//创建一个用于渲染的View 用于view-base

- (nullable __kindof NSView *)makeViewWithIdentifier:(NSString *)identifier owner:(nullable id)owner;


//下面这些方法用来根据列表数据

//开始更新

- (void)beginUpdates NS_AVAILABLE_MAC(10_7);

//结束更新

- (void)endUpdates NS_AVAILABLE_MAC(10_7);

//插入行

- (void)insertRowsAtIndexes:(NSIndexSet *)indexes withAnimation:(NSTableViewAnimationOptions)animationOptions NS_AVAILABLE_MAC(10_7);

//删除行

- (void)removeRowsAtIndexes:(NSIndexSet *)indexes withAnimation:(NSTableViewAnimationOptions)animationOptions NS_AVAILABLE_MAC(10_7);

//移动行

- (void)moveRowAtIndex:(NSInteger)oldIndex toIndex:(NSInteger)newIndex NS_AVAILABLE_MAC(10_7);

//隐藏行

- (void)hideRowsAtIndexes:(NSIndexSet *)indexes withAnimation:(NSTableViewAnimationOptions)rowAnimation NS_AVAILABLE_MAC(10_11);

//取消隐藏行

- (void)unhideRowsAtIndexes:(NSIndexSet *)indexes withAnimation:(NSTableViewAnimationOptions)rowAnimation NS_AVAILABLE_MAC(10_11);

//所有隐藏状态的行

@property (readonly, copy) NSIndexSet *hiddenRowIndexes;

十、相关通知


//列表选择改变后发的通知

APPKIT_EXTERN NSNotificationName NSTableViewSelectionDidChangeNotification;

//列移动后发的通知

APPKIT_EXTERN NSNotificationName NSTableViewColumnDidMoveNotification;    

//列宽度改变后发的通知

APPKIT_EXTERN NSNotificationName NSTableViewColumnDidResizeNotification;

//选择改变时发的通知  

APPKIT_EXTERN NSNotificationName NSTableViewSelectionIsChangingNotification;

目录
相关文章
|
1月前
|
安全 前端开发 iOS开发
揭秘 electron-builder:macOS 应用打包背后到底发生了什么?
本文详细介绍了 Electron 应用在 macOS 平台上的打包流程,涵盖配置文件、打包步骤、签名及 notarization 等关键环节。通过剖析 `electron-builder` 的源码,展示了如何处理多架构应用、执行签名,并解决常见问题。适合希望深入了解 macOS 打包细节的开发者。
41 2
|
6月前
|
关系型数据库 MySQL iOS开发
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
macOS Catalina(10.15)如何访问iPhone(Ipad)的应用文档文件
201 0
|
6月前
|
Web App开发 iOS开发 MacOS
解决macOS 应用安装在下载目录时遇到的 vscode 掉登录和应用无法随机启动的问题
解决macOS 应用安装在下载目录时遇到的 vscode 掉登录和应用无法随机启动的问题
143 0
|
监控 机器人 程序员
【小工具】一键隐藏/显示MacOS的应用图标
【小工具】一键隐藏/显示MacOS的应用图标
|
iOS开发 MacOS
全网首发:(解决办法)MAC OS Xcode给应用设置沙箱(Enable App Sandbox)之后,运行报错Illegal instruction: 4
全网首发:(解决办法)MAC OS Xcode给应用设置沙箱(Enable App Sandbox)之后,运行报错Illegal instruction: 4
752 0
全网首发:(解决办法)MAC OS Xcode给应用设置沙箱(Enable App Sandbox)之后,运行报错Illegal instruction: 4
|
Dart 安全 IDE
Flutter Web实战项目打造真正跨平台应用(windows,android,ios,linux,macos,web)
Flutter Web项目 Flutter 最近发布了 Flutter V2.5.1,其性能得到了很大提升,支持 Web、macOS、Android 和 iOS。 这就是为什么今天我们使用在 Web、macOS 应用、Android 和 iOS 应用上运行的 flutter 创建响应式博客主题。 此外,我们创建了一个具有自定义悬停动画的动画网络菜单。 最后,您将学习如何使用 Flutter 制作响应式应用程序。
586 0
Flutter Web实战项目打造真正跨平台应用(windows,android,ios,linux,macos,web)
|
Web App开发 Dart 安全
flutter制作博客展示平台,现已支持 Web、macOS 应用、Android 和 iOS
Flutter Blog Theme using Flutter | Web, macOS, Android, iOS Flutter 最近发布了 Flutter V2.5.1,其性能得到了很大提升,支持 Web、macOS、Android 和 iOS。 这就是为什么今天我们使用在 Web、macOS 应用、Android 和 iOS 应用上运行的 flutter 创建响应式博客主题。 此外,我们创建了一个具有自定义悬停动画的动画网络菜单。 最后,您将学习如何使用 Flutter 制作响应式应用程序。
382 0
flutter制作博客展示平台,现已支持 Web、macOS 应用、Android 和 iOS
|
Shell 开发工具 Android开发
如何在MacOS上创建第一个iOS Flutter应用
1.安装Flutter 2.设置iOS模拟器 3.在Flutter中创建一个Hello World应用
174 0
如何在MacOS上创建第一个iOS Flutter应用
|
iOS开发 MacOS
MACOS,应用签名后就崩溃?
MACOS,应用签名后就崩溃?
152 0
|
3月前
|
关系型数据库 MySQL 数据库
【Mac os系统】安装MySQL数据库
本文详细介绍了在Mac OS系统上安装MySQL数据库的步骤,包括下载、安装、配置环境变量、启动服务、授权设置以及解决常见问题,并提供了一些常用的MySQL命令。
197 0
【Mac os系统】安装MySQL数据库