---
title: NSTableViewDelegate
framework: appkit
role: symbol
role_heading: Protocol
path: appkit/nstableviewdelegate
---

# NSTableViewDelegate

A set of optional methods you implement in a table view delegate to customize the behavior of the table view.

## Declaration

```swift
protocol NSTableViewDelegate : NSControlTextEditingDelegate
```

## Overview

Overview Using a table view delegate allows you to customize a table view’s behavior without creating a table view subclass. A table view delegate provides views for table rows and columns, and supports functionality such as column reordering and resizing and row selection. To learn more about table views, see NSTableView.

## Topics

### Providing views for rows and columns

- [tableView(_:viewFor:row:)](appkit/nstableviewdelegate/tableview(_:viewfor:row:).md)
- [tableView(_:rowViewForRow:)](appkit/nstableviewdelegate/tableview(_:rowviewforrow:).md)

### Notification of row views being added or removed

- [tableView(_:didAdd:forRow:)](appkit/nstableviewdelegate/tableview(_:didadd:forrow:).md)
- [tableView(_:didRemove:forRow:)](appkit/nstableviewdelegate/tableview(_:didremove:forrow:).md)

### Grouping rows

- [tableView(_:isGroupRow:)](appkit/nstableviewdelegate/tableview(_:isgrouprow:).md)

### Providing cells for rows and columns

- [tableView(_:willDisplayCell:for:row:)](appkit/nstableviewdelegate/tableview(_:willdisplaycell:for:row:).md)
- [tableView(_:dataCellFor:row:)](appkit/nstableviewdelegate/tableview(_:datacellfor:row:).md)
- [tableView(_:shouldShowCellExpansionFor:row:)](appkit/nstableviewdelegate/tableview(_:shouldshowcellexpansionfor:row:).md)
- [tableView(_:toolTipFor:rect:tableColumn:row:mouseLocation:)](appkit/nstableviewdelegate/tableview(_:tooltipfor:rect:tablecolumn:row:mouselocation:).md)

### Editing cells

- [tableView(_:shouldEdit:row:)](appkit/nstableviewdelegate/tableview(_:shouldedit:row:).md)

### Setting row and column size

- [tableView(_:heightOfRow:)](appkit/nstableviewdelegate/tableview(_:heightofrow:).md)
- [tableView(_:sizeToFitWidthOfColumn:)](appkit/nstableviewdelegate/tableview(_:sizetofitwidthofcolumn:).md)

### Selecting rows

- [selectionShouldChange(in:)](appkit/nstableviewdelegate/selectionshouldchange(in:).md)
- [tableView(_:shouldSelectRow:)](appkit/nstableviewdelegate/tableview(_:shouldselectrow:).md)
- [tableView(_:selectionIndexesForProposedSelection:)](appkit/nstableviewdelegate/tableview(_:selectionindexesforproposedselection:).md)
- [tableView(_:shouldSelect:)](appkit/nstableviewdelegate/tableview(_:shouldselect:).md)
- [tableViewSelectionIsChanging(_:)](appkit/nstableviewdelegate/tableviewselectionischanging(_:).md)
- [tableViewSelectionDidChange(_:)](appkit/nstableviewdelegate/tableviewselectiondidchange(_:).md)
- [tableView(_:shouldTypeSelectFor:withCurrentSearch:)](appkit/nstableviewdelegate/tableview(_:shouldtypeselectfor:withcurrentsearch:).md)
- [tableView(_:typeSelectStringFor:row:)](appkit/nstableviewdelegate/tableview(_:typeselectstringfor:row:).md)
- [tableView(_:nextTypeSelectMatchFromRow:toRow:for:)](appkit/nstableviewdelegate/tableview(_:nexttypeselectmatchfromrow:torow:for:).md)

### Moving and resizing columns

- [tableView(_:shouldReorderColumn:toColumn:)](appkit/nstableviewdelegate/tableview(_:shouldreordercolumn:tocolumn:).md)
- [tableView(_:didDrag:)](appkit/nstableviewdelegate/tableview(_:diddrag:).md)
- [tableViewColumnDidMove(_:)](appkit/nstableviewdelegate/tableviewcolumndidmove(_:).md)
- [tableViewColumnDidResize(_:)](appkit/nstableviewdelegate/tableviewcolumndidresize(_:).md)

### Responding to mouse events

- [tableView(_:didClick:)](appkit/nstableviewdelegate/tableview(_:didclick:).md)
- [tableView(_:mouseDownInHeaderOf:)](appkit/nstableviewdelegate/tableview(_:mousedowninheaderof:).md)
- [tableView(_:shouldTrackCell:for:row:)](appkit/nstableviewdelegate/tableview(_:shouldtrackcell:for:row:).md)

### Enabling table row actions

- [tableView(_:rowActionsForRow:edge:)](appkit/nstableviewdelegate/tableview(_:rowactionsforrow:edge:).md)

### Showing and hiding columns

- [tableView(_:userCanChangeVisibilityOf:)](appkit/nstableviewdelegate/tableview(_:usercanchangevisibilityof:).md)
- [tableView(_:userDidChangeVisibilityOf:)](appkit/nstableviewdelegate/tableview(_:userdidchangevisibilityof:).md)

## Relationships

### Inherits From

- [NSControlTextEditingDelegate](appkit/nscontroltexteditingdelegate.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)

## See Also

### Management

- [NSTableViewDataSource](appkit/nstableviewdatasource.md)
- [NSTableViewDiffableDataSource](appkit/nstableviewdiffabledatasource-c5gl.md)
