iOS Developer Library

Developer

UIKit Framework Reference UITableView Class Reference

Options
Deployment Target:

On This Page
Language:

UITableView

Conforms To


Import Statement


Swift

import UIKit

Objective-C

@import UIKit;

Availability


Available in iOS 2.0 and later.

An instance of UITableView (or simply, a table view) is a means for displaying and editing hierarchical lists of information.

A table view displays a list of items in a single column. UITableView is a subclass of UIScrollView, which allows users to scroll through the table, although UITableView allows vertical scrolling only. The cells comprising the individual items of the table are UITableViewCell objects; UITableView uses these objects to draw the visible rows of the table. Cells have content—titles and images—and can have, near the right edge, accessory views. Standard accessory views are disclosure indicators or detail disclosure buttons; the former leads to the next level in a data hierarchy and the latter leads to a detailed view of a selected item. Accessory views can also be framework controls, such as switches and sliders, or can be custom views. Table views can enter an editing mode where users can insert, delete, and reorder rows of the table.

A table view is made up of zero or more sections, each with its own rows. Sections are identified by their index number within the table view, and rows are identified by their index number within a section. Any section can optionally be preceded by a section header, and optionally be followed by a section footer.

Table views can have one of two styles, UITableViewStylePlain and UITableViewStyleGrouped. When you create a UITableView instance you must specify a table style, and this style cannot be changed. In the plain style, section headers and footers float above the content if the part of a complete section is visible. A table view can have an index that appears as a bar on the right hand side of the table (for example, "A" through "Z"). You can touch a particular label to jump to the target section. The grouped style of table view provides a default background color and a default background view for all cells. The background view provides a visual grouping for all cells in a particular section. For example, one group could be a person's name and title, another group for phone numbers that the person uses, and another group for email accounts and so on. See the Settings application for examples of grouped tables. Table views in the grouped style cannot have an index.

Many methods of UITableView take NSIndexPath objects as parameters and return values. UITableView declares a category on NSIndexPath that enables you to get the represented row index (row property) and section index (section property), and to construct an index path from a given row index and section index (indexPathForRow:inSection: method). Especially in table views with multiple sections, you must evaluate the section index before identifying a row by its index number.

A UITableView object must have an object that acts as a data source and an object that acts as a delegate; typically these objects are either the application delegate or, more frequently, a custom UITableViewController object. The data source must adopt the UITableViewDataSource protocol and the delegate must adopt the UITableViewDelegate protocol. The data source provides information that UITableView needs to construct tables and manages the data model when rows of a table are inserted, deleted, or reordered. The delegate manages table row configuration and selection, row reordering, highlighting, accessory views, and editing operations.

When sent a setEditing:animated: message (with a first parameter of YEStrue), the table view enters into editing mode where it shows the editing or reordering controls of each visible row, depending on the editingStyle of each associated UITableViewCell. Clicking on the insertion or deletion control causes the data source to receive a tableView:commitEditingStyle:forRowAtIndexPath: message. You commit a deletion or insertion by calling deleteRowsAtIndexPaths:withRowAnimation: or insertRowsAtIndexPaths:withRowAnimation:, as appropriate. Also in editing mode, if a table-view cell has its showsReorderControl property set to YEStrue, the data source receives a tableView:moveRowAtIndexPath:toIndexPath: message. The data source can selectively remove the reordering control for cells by implementing tableView:canMoveRowAtIndexPath:.

UITableView caches table-view cells for visible rows. You can create custom UITableViewCell objects with content or behavioral characteristics that are different than the default cells; A Closer Look at Table View Cells explains how.

UITableView overrides the layoutSubviews method of UIView so that it calls reloadData only when you create a new instance of UITableView or when you assign a new data source. Reloading the table view clears current state, including the current selection. However, if you explicitly call reloadData, it clears this state and any subsequent direct or indirect call to layoutSubviews does not trigger a reload.

For information about basic view behaviors, see View Programming Guide for iOS.

State Preservation

In iOS 6 and later, if you assign a value to a table view’s restorationIdentifier property, it attempts to preserve the currently selected rows and the first visible row. The table’s data source may adopt the UIDataSourceModelAssociation protocol, which provides a way to identify a row’s contents independent of that row’s position in the table. If the table’s data source adopts the UIDataSourceModelAssociation protocol, the data source will be consulted when saving state to convert the index paths for the top visible row and any selected cells to identifiers. During restoration, the data source will be consulted to convert those identifiers back to index paths and reestablish the top visible row, and reselect the cells. If the table’s data source does not implement the UIDataSourceModelAssociation protocol, the scroll position will be saved and restored directly, as will the index paths for selected cells.

For more information about how state preservation and restoration works, see App Programming Guide for iOS.

For more information about appearance and behavior configuration, see Table Views.

  • Initializes and returns a table view object having the given frame and style.

    Declaration

    Swift

    init(frame frame: CGRect, style style: UITableViewStyle)

    Objective-C

    - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style

    Parameters

    frame

    A rectangle specifying the initial location and size of the table view in its superview’€™s coordinates. The frame of the table view changes as table cells are added and deleted.

    style

    A constant that specifies the style of the table view. See Table View Style for descriptions of valid constants.

    Return Value

    Returns an initialized UITableView object, or nil if the object could not be successfully initialized.

    Discussion

    You must specify the style of a table view when you create it and you cannot thereafter modify the style. If you initialize the table view with the UIView method initWithFrame:, the UITableViewStylePlain style is used as a default.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • style style Property

    Returns the style of the table view. (read-only)

    Declaration

    Swift

    var style: UITableViewStyle { get }

    Objective-C

    @property(nonatomic, readonly) UITableViewStyle style

    Discussion

    See Table View Style for descriptions of the constants used to specify table-view style.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns the number of rows (table cells) in a specified section.

    Declaration

    Swift

    func numberOfRowsInSection(_ section: Int) -> Int

    Objective-C

    - (NSInteger)numberOfRowsInSection:(NSInteger)section

    Parameters

    section

    An index number that identifies a section of the table. Table views in a plain style have a section index of zero.

    Return Value

    The number of rows in the section.

    Discussion

    UITableView gets the value returned by this method from its data source and caches it.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns the number of sections in the table view.

    Declaration

    Swift

    func numberOfSections() -> Int

    Objective-C

    - (NSInteger)numberOfSections

    Return Value

    The number of sections in the table view.

    Discussion

    UITableView gets the value returned by this method from its data source and caches it.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • rowHeight rowHeight Property

    The height of each row (table cell) in the table view.

    Declaration

    Swift

    var rowHeight: CGFloat

    Objective-C

    @property(nonatomic) CGFloat rowHeight

    Discussion

    Row height is nonnegative and is expressed in points. You may set the row height for cells if the delegate doesn’t implement the tableView:heightForRowAtIndexPath: method. If you do not explicitly set the row height, UITableView sets it to a standard value.

    There are performance implications to using tableView:heightForRowAtIndexPath: instead of rowHeight. Every time a table view is displayed, it calls tableView:heightForRowAtIndexPath: on the delegate for each of its rows, which can result in a significant performance problem with table views having a large number of rows (approximately 1000 or more).

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • The style for table cells used as separators.

    Declaration

    Swift

    var separatorStyle: UITableViewCellSeparatorStyle

    Objective-C

    @property(nonatomic) UITableViewCellSeparatorStyle separatorStyle

    Discussion

    The value of this property is one of the separator-style constants described in UITableViewCell Class Reference. UITableView uses this property to set the separator style on the cell returned from the delegate in tableView:cellForRowAtIndexPath:.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

    See Also

    separatorColor

  • The color of separator rows in the table view.

    Declaration

    Swift

    var separatorColor: UIColor!

    Objective-C

    @property(nonatomic, retain) UIColor *separatorColor

    Discussion

    The default color is gray.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

    See Also

    separatorStyle

  • The effect applied to table separators.

    Declaration

    Swift

    @NSCopying var separatorEffect: UIVisualEffect?

    Objective-C

    @property(nonatomic, copy) UIVisualEffect *separatorEffect

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 8.0 and later.

  • The background view of the table view.

    Declaration

    Swift

    var backgroundView: UIView?

    Objective-C

    @property(nonatomic, readwrite, retain) UIView *backgroundView

    Discussion

    A table view’s background view is automatically resized to match the size of the table view. This view is placed as a subview of the table view behind all cells, header views, and footer views.

    You must set this property to nil to set the background color of the table view.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 3.2 and later.

  • Specifies the default inset of cell separators.

    Declaration

    Swift

    var separatorInset: UIEdgeInsets

    Objective-C

    @property(nonatomic) UIEdgeInsets separatorInset

    Discussion

    In iOS 7 and later, cell separators do not extend all the way to the edge of the table view. This property sets the default inset for all cells in the table, much as rowHeight sets the default height for cells. It is also used for managing the “extra” separators drawn at the bottom of plain style tables.

    For example, to specify a table view where the default left separator inset is 3 points and the default right separator inset is 11, you would write:

    • tableView.separatorInset = UIEdgeInsetsMake(0, 3, 0, 11);

    Special Considerations

    Only left and right insets are honored.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 7.0 and later.

  • Registers a nib object containing a cell with the table view under a specified identifier.

    Declaration

    Swift

    func registerNib(_ nib: UINib, forCellReuseIdentifier identifier: String)

    Objective-C

    - (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier

    Parameters

    nib

    A nib object that specifies the nib file to use to create the cell. This parameter cannot be nil.

    identifier

    The reuse identifier for the cell. This parameter must not be nil and must not be an empty string.

    Discussion

    Before dequeueing any cells, call this method or the registerClass:forCellReuseIdentifier: method to tell the table view how to create new cells. If a cell of the specified type is not currently in a reuse queue, the table view uses the provided information to create a new cell object automatically.

    If you previously registered a class or nib file with the same reuse identifier, the nib you specify in the nib parameter replaces the old entry. You may specify nil for nib if you want to unregister the nib from the specified reuse identifier.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 5.0 and later.

    See Also

    tableView:cellForRowAtIndexPath: (UITableViewDataSource)

  • Registers a class for use in creating new table cells.

    Declaration

    Swift

    func registerClass(_ cellClass: AnyClass, forCellReuseIdentifier identifier: String)

    Objective-C

    - (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier

    Parameters

    cellClass

    The class of a cell that you want to use in the table.

    identifier

    The reuse identifier for the cell. This parameter must not be nil and must not be an empty string.

    Discussion

    Prior to dequeueing any cells, call this method or the registerNib:forCellReuseIdentifier: method to tell the table view how to create new cells. If a cell of the specified type is not currently in a reuse queue, the table view uses the provided information to create a new cell object automatically.

    If you previously registered a class or nib file with the same reuse identifier, the class you specify in the cellClass parameter replaces the old entry. You may specify nil for cellClass if you want to unregister the class from the specified reuse identifier.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 6.0 and later.

  • Returns a reusable table-view cell object for the specified reuse identifier.

    Declaration

    Swift

    func dequeueReusableCellWithIdentifier(_ identifier: String, forIndexPath indexPath: NSIndexPath) -> AnyObject

    Objective-C

    - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath

    Parameters

    identifier

    A string identifying the cell object to be reused. This parameter must not be nil.

    indexPath

    The index path specifying the location of the cell. The data source receives this information when it is asked for the cell and should just pass it along. This method uses the index path to perform additional configuration based on the cell’s position in the table view.

    Return Value

    A UITableViewCell object with the associated reuse identifier. This method always returns a valid cell.

    Discussion

    For performance reasons, a table view’€™s data source should generally reuse UITableViewCell objects when it assigns cells to rows in its tableView:cellForRowAtIndexPath: method. A table view maintains a queue or list of UITableViewCell objects that the data source has marked for reuse. Call this method from your data source object when asked to provide a new cell for the table view. This method dequeues an existing cell if one is available or creates a new one based on the class or nib file you previously registered.

    If you registered a class for the specified identifier and a new cell must be created, this method initializes the cell by calling its initWithStyle:reuseIdentifier: method. For nib-based cells, this method loads the cell object from the provided nib file. If an existing cell was available for reuse, this method calls the cell’s prepareForReuse method instead.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 6.0 and later.

  • Returns a reusable table-view cell object located by its identifier.

    Declaration

    Swift

    func dequeueReusableCellWithIdentifier(_ identifier: String) -> AnyObject?

    Objective-C

    - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier

    Parameters

    identifier

    A string identifying the cell object to be reused. This parameter must not be nil.

    Return Value

    A UITableViewCell object with the associated identifier or nil if no such object exists in the reusable-cell queue.

    Discussion

    For performance reasons, a table view’€™s data source should generally reuse UITableViewCell objects when it assigns cells to rows in its tableView:cellForRowAtIndexPath: method. A table view maintains a queue or list of UITableViewCell objects that the data source has marked for reuse. Call this method from your data source object when asked to provide a new cell for the table view. This method dequeues an existing cell if one is available or creates a new one using the class or nib file you previously registered. If no cell is available for reuse and you did not register a class or nib file, this method returns nil.

    If you registered a class for the specified identifier and a new cell must be created, this method initializes the cell by calling its initWithStyle:reuseIdentifier: method. For nib-based cells, this method loads the cell object from the provided nib file. If an existing cell was available for reuse, this method calls the cell’s prepareForReuse method instead.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Registers a nib object containing a header or footer with the table view under a specified identifier.

    Declaration

    Swift

    func registerNib(_ nib: UINib, forHeaderFooterViewReuseIdentifier identifier: String)

    Objective-C

    - (void)registerNib:(UINib *)nib forHeaderFooterViewReuseIdentifier:(NSString *)identifier

    Parameters

    nib

    A nib object that specifies the nib file to use to create the header or footer view. This parameter cannot be nil.

    identifier

    The reuse identifier for the header or footer view. This parameter must not be nil and must not be an empty string.

    Discussion

    Before dequeueing any header or footer views, call this method or the registerClass:forHeaderFooterViewReuseIdentifier: method to tell the table view how to create new instances of your views. If a view of the specified type is not currently in a reuse queue, the table view uses the provided information to create a new one automatically.

    If you previously registered a class or nib file with the same reuse identifier, the nib you specify in the nib parameter replaces the old entry. You may specify nil for nib if you want to unregister the nib from the specified reuse identifier.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 6.0 and later.

  • Registers a class for use in creating new table header or footer views.

    Declaration

    Swift

    func registerClass(_ aClass: AnyClass, forHeaderFooterViewReuseIdentifier identifier: String)

    Objective-C

    - (void)registerClass:(Class)aClass forHeaderFooterViewReuseIdentifier:(NSString *)identifier

    Parameters

    aClass

    The class of a header or footer view that you want to use in the table.

    identifier

    The reuse identifier for the header or footer view. This parameter must not be nil and must not be an empty string.

    Discussion

    Before dequeueing any header or footer views, call this method or the registerNib:forHeaderFooterViewReuseIdentifier: method to tell the table view how to create new instances of your views. If a view of the specified type is not currently in a reuse queue, the table view uses the provided information to create a one automatically.

    If you previously registered a class or nib file with the same reuse identifier, the class you specify in the aClass parameter replaces the old entry. You may specify nil for aClass if you want to unregister the class from the specified reuse identifier.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 6.0 and later.

  • Returns a reusable header or footer view located by its identifier.

    Declaration

    Swift

    func dequeueReusableHeaderFooterViewWithIdentifier(_ identifier: String) -> AnyObject?

    Objective-C

    - (id)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier

    Parameters

    identifier

    A string identifying the header or footer view to be reused. This parameter must not be nil.

    Return Value

    A UITableViewHeaderFooterView object with the associated identifier or nil if no such object exists in the reusable view queue.

    Discussion

    For performance reasons, a table view’s delegate should generally reuse UITableViewHeaderFooterView objects when it is asked to provide them. A table view maintains a queue or list of UITableViewHeaderFooterView objects that the table view's delegate has marked for reuse. It marks a view for reuse by assigning it a reuse identifier when it creates it (that is, in the initWithReuseIdentifier: method of UITableViewHeaderFooterView).

    You can use this method to access specific template header and footer views that you previously created. You can access a view’€™s reuse identifier through its reuseIdentifier property.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 6.0 and later.

  • Returns an accessory view that is displayed above the table.

    Declaration

    Swift

    var tableHeaderView: UIView?

    Objective-C

    @property(nonatomic, retain) UIView *tableHeaderView

    Discussion

    The default value is nil. The table header view is different from a section header.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns an accessory view that is displayed below the table.

    Declaration

    Swift

    var tableFooterView: UIView?

    Objective-C

    @property(nonatomic, retain) UIView *tableFooterView

    Discussion

    The default value is nil. The table footer view is different from a section footer.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • The height of section headers in the table view.

    Declaration

    Swift

    var sectionHeaderHeight: CGFloat

    Objective-C

    @property(nonatomic) CGFloat sectionHeaderHeight

    Discussion

    This nonnegative value is used only if the delegate doesn’t implement the tableView:heightForHeaderInSection: method.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

    See Also

    tableHeaderView

  • The height of section footers in the table view.

    Declaration

    Swift

    var sectionFooterHeight: CGFloat

    Objective-C

    @property(nonatomic) CGFloat sectionFooterHeight

    Discussion

    This nonnegative value is used only in section group tables and only if the delegate doesn't implement the tableView:heightForFooterInSection: method.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

    See Also

    tableFooterView

  • Returns the header view associated with the specified section.

    Declaration

    Swift

    func headerViewForSection(_ section: Int) -> UITableViewHeaderFooterView?

    Objective-C

    - (UITableViewHeaderFooterView *)headerViewForSection:(NSInteger)section

    Parameters

    section

    An index number that identifies a section of the table. Table views in a plain style have a section index of zero.

    Return Value

    The header view associated with the section, or nil if the section does not have a header view.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 6.0 and later.

  • Returns the footer view associated with the specified section.

    Declaration

    Swift

    func footerViewForSection(_ section: Int) -> UITableViewHeaderFooterView?

    Objective-C

    - (UITableViewHeaderFooterView *)footerViewForSection:(NSInteger)section

    Parameters

    section

    An index number that identifies a section of the table. Table views in a plain style have a section index of zero.

    Return Value

    The footer view associated with the section, or nil if the section does not have a footer view.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 6.0 and later.

  • Returns the table cell at the specified index path.

    Declaration

    Swift

    func cellForRowAtIndexPath(_ indexPath: NSIndexPath) -> UITableViewCell?

    Objective-C

    - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath

    Parameters

    indexPath

    The index path locating the row in the table view.

    Return Value

    An object representing a cell of the table, or nil if the cell is not visible or indexPath is out of range.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns an index path representing the row and section of a given table-view cell.

    Declaration

    Swift

    func indexPathForCell(_ cell: UITableViewCell) -> NSIndexPath?

    Objective-C

    - (NSIndexPath *)indexPathForCell:(UITableViewCell *)cell

    Parameters

    cell

    A cell object of the table view.

    Return Value

    An index path representing the row and section of the cell, or nil if the index path is invalid.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns an index path identifying the row and section at the given point.

    Declaration

    Swift

    func indexPathForRowAtPoint(_ point: CGPoint) -> NSIndexPath?

    Objective-C

    - (NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point

    Parameters

    point

    A point in the local coordinate system of the table view (the table view’€™s bounds).

    Return Value

    An index path representing the row and section associated with point, or nil if the point is out of the bounds of any row.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • An array of index paths each representing a row enclosed by a given rectangle.

    Declaration

    Swift

    func indexPathsForRowsInRect(_ rect: CGRect) -> [AnyObject]

    Objective-C

    - (NSArray *)indexPathsForRowsInRect:(CGRect)rect

    Parameters

    rect

    A rectangle defining an area of the table view in local coordinates.

    Return Value

    An array of NSIndexPath objects each representing a row and section index identifying a row within rect. Returns an empty array if there aren’t any rows to return.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns the table cells that are visible in the table view.

    Declaration

    Swift

    func visibleCells() -> [AnyObject]

    Objective-C

    - (NSArray *)visibleCells

    Return Value

    An array containing UITableViewCell objects, each representing a visible cell in the table view.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns an array of index paths each identifying a visible row in the table view.

    Declaration

    Swift

    func indexPathsForVisibleRows() -> [AnyObject]?

    Objective-C

    - (NSArray *)indexPathsForVisibleRows

    Return Value

    An array of NSIndexPath objects each representing a row index and section index that together identify a visible row in the table view. Returns nil if no rows are visible.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • The estimated height of rows in the table view.

    Declaration

    Swift

    var estimatedRowHeight: CGFloat

    Objective-C

    @property(nonatomic) CGFloat estimatedRowHeight

    Discussion

    Providing a nonnegative estimate of the height of rows can improve the performance of loading the table view. If the table contains variable height rows, it might be expensive to calculate all their heights when the table loads. Using estimation allows you to defer some of the cost of geometry calculation from load time to scrolling time.

    The default value is 0, which means there is no estimate.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 7.0 and later.

  • The estimated height of section headers in the table view.

    Declaration

    Swift

    var estimatedSectionHeaderHeight: CGFloat

    Objective-C

    @property(nonatomic) CGFloat estimatedSectionHeaderHeight

    Discussion

    Providing a nonnegative estimate of the height of section headers can improve the performance of loading the table view. If the table contains variable height section headers, it might be expensive to calculate all their heights when the table loads. Using estimation allows you to defer some of the cost of geometry calculation from load time to scrolling time.

    The default value is 0, which means there is no estimate.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 7.0 and later.

  • The estimated height of section footers in the table view.

    Declaration

    Swift

    var estimatedSectionFooterHeight: CGFloat

    Objective-C

    @property(nonatomic) CGFloat estimatedSectionFooterHeight

    Discussion

    Providing a nonnegative estimate of the height of section footers can improve the performance of loading the table view. If the table contains variable height section footers, it might be expensive to calculate all their heights when the table loads. Using estimation allows you to defer some of the cost of geometry calculation from load time to scrolling time.

    The default value is 0, which means there is no estimate.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 7.0 and later.

  • Scrolls through the table view until a row identified by index path is at a particular location on the screen.

    Declaration

    Swift

    func scrollToRowAtIndexPath(_ indexPath: NSIndexPath, atScrollPosition scrollPosition: UITableViewScrollPosition, animated animated: Bool)

    Objective-C

    - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated

    Parameters

    indexPath

    An index path that identifies a row in the table view by its row index and its section index.

    NSNotFound is a valid row index for scrolling to a section with zero rows.

    scrollPosition

    A constant that identifies a relative position in the table view (top, middle, bottom) for row when scrolling concludes. See Table View Scroll Position for descriptions of valid constants.

    animated

    YEStrue if you want to animate the change in position; NOfalse if it should be immediate.

    Discussion

    Invoking this method does not cause the delegate to receive a scrollViewDidScroll: message, as is normal for programmatically invoked user interface operations.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Scrolls the table view so that the selected row nearest to a specified position in the table view is at that position.

    Declaration

    Swift

    func scrollToNearestSelectedRowAtScrollPosition(_ scrollPosition: UITableViewScrollPosition, animated animated: Bool)

    Objective-C

    - (void)scrollToNearestSelectedRowAtScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated

    Parameters

    scrollPosition

    A constant that identifies a relative position in the table view (top, middle, bottom) for the row when scrolling concludes. See Table View Scroll Position for a descriptions of valid constants.

    animated

    YEStrue if you want to animate the change in position; NOfalse if it should be immediate.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns an index path identifying the row and section of the selected row.

    Declaration

    Swift

    func indexPathForSelectedRow() -> NSIndexPath?

    Objective-C

    - (NSIndexPath *)indexPathForSelectedRow

    Return Value

    An index path identifying the row and section indexes of the selected row, or nil if the index path is invalid.

    Discussion

    If there are multiple selections, this method returns the first index-path object in the array of row selections; this object has the lowest index values for section and row.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns the index paths representing the selected rows.

    Declaration

    Swift

    func indexPathsForSelectedRows() -> [AnyObject]?

    Objective-C

    - (NSArray *)indexPathsForSelectedRows

    Return Value

    An array of index-path objects each identifying a row through its section and row index. Returns nil if there are no selected rows.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 5.0 and later.

  • Selects a row in the table view identified by index path, optionally scrolling the row to a location in the table view.

    Declaration

    Swift

    func selectRowAtIndexPath(_ indexPath: NSIndexPath?, animated animated: Bool, scrollPosition scrollPosition: UITableViewScrollPosition)

    Objective-C

    - (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition

    Parameters

    indexPath

    An index path identifying a row in the table view.

    animated

    YEStrue if you want to animate the selection and any change in position; NOfalse if the change should be immediate.

    scrollPosition

    A constant that identifies a relative position in the table view (top, middle, bottom) for the row when scrolling concludes. See Table View Scroll Position for descriptions of valid constants.

    Discussion

    Calling this method does not cause the delegate to receive a tableView:willSelectRowAtIndexPath: or tableView:didSelectRowAtIndexPath: message, nor does it send UITableViewSelectionDidChangeNotification notifications to observers.

    Special Considerations

    Passing UITableViewScrollPositionNone results in no scrolling, rather than the minimum scrolling described for that constant. To scroll to the newly selected row with minimum scrolling, select the row using this method with UITableViewScrollPositionNone, then call scrollToRowAtIndexPath:atScrollPosition:animated: with UITableViewScrollPositionNone.

    • NSIndexPath *rowToSelect; // assume this exists and is set properly
    • UITableView *myTableView; // assume this exists
    • [myTableView selectRowAtIndexPath:rowToSelect animated:YES scrollPosition:UITableViewScrollPositionNone];
    • [myTableView scrollToRowAtIndexPath:rowToSelect atScrollPosition:UITableViewScrollPositionNone animated:YES];

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Deselects a given row identified by index path, with an option to animate the deselection.

    Declaration

    Swift

    func deselectRowAtIndexPath(_ indexPath: NSIndexPath, animated animated: Bool)

    Objective-C

    - (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated

    Parameters

    indexPath

    An index path identifying a row in the table view.

    animated

    YEStrue if you want to animate the deselection, and NOfalse if the change should be immediate.

    Discussion

    Calling this method does not cause the delegate to receive a tableView:willSelectRowAtIndexPath: or tableView:didSelectRowAtIndexPath: message, nor does it send UITableViewSelectionDidChangeNotification notifications to observers.

    Calling this method does not cause any scrolling to the deselected row.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • A Boolean value that determines whether users can select a row.

    Declaration

    Swift

    var allowsSelection: Bool

    Objective-C

    @property(nonatomic) BOOL allowsSelection

    Discussion

    If the value of this property is YEStrue (the default), users can select rows. If you set it to NOfalse, they cannot select rows. Setting this property affects cell selection only when the table view is not in editing mode. If you want to restrict selection of cells in editing mode, use allowsSelectionDuringEditing.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 3.0 and later.

  • A Boolean value that determines whether users can select more than one row outside of editing mode.

    Declaration

    Swift

    var allowsMultipleSelection: Bool

    Objective-C

    @property(nonatomic) BOOL allowsMultipleSelection

    Discussion

    This property controls whether multiple rows can be selected simultaneously outside of editing mode. When the value of this property is YEStrue, a check mark is placed next to each row that is tapped. Tapping the row again removes the check mark. If you call indexPathsForSelectedRows, you can get the index paths that identify the selected rows.

    The default value of this property is NOfalse.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 5.0 and later.

  • A Boolean value that determines whether users can select cells while the table view is in editing mode.

    Declaration

    Swift

    var allowsSelectionDuringEditing: Bool

    Objective-C

    @property(nonatomic) BOOL allowsSelectionDuringEditing

    Discussion

    If the value of this property is YEStrue, users can select rows during editing. The default value is NOfalse. If you want to restrict selection of cells regardless of mode, use allowsSelection.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • A Boolean value that controls whether users can select more than one cell simultaneously in editing mode.

    Declaration

    Swift

    var allowsMultipleSelectionDuringEditing: Bool

    Objective-C

    @property(nonatomic) BOOL allowsMultipleSelectionDuringEditing

    Discussion

    The default value of this property is NOfalse. If you set it to YEStrue, check marks appear next to selected rows in editing mode. In addition, UITableView does not query for editing styles when it goes into editing mode. If you call indexPathsForSelectedRows, you can get the index paths that identify the selected rows.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 5.0 and later.

  • Begins a series of method calls that insert, delete, or select rows and sections of the table view.

    Declaration

    Swift

    func beginUpdates()

    Objective-C

    - (void)beginUpdates

    Discussion

    Call this method if you want subsequent insertions, deletion, and selection operations (for example, cellForRowAtIndexPath: and indexPathsForVisibleRows) to be animated simultaneously. You can also use this method followed by the endUpdates method to animate the change in the row heights without reloading the cell. This group of methods must conclude with an invocation of endUpdates. These method pairs can be nested. If you do not make the insertion, deletion, and selection calls inside this block, table attributes such as row count might become invalid. You should not call reloadData within the group; if you call this method within the group, you must perform any animations yourself.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Concludes a series of method calls that insert, delete, select, or reload rows and sections of the table view.

    Declaration

    Swift

    func endUpdates()

    Objective-C

    - (void)endUpdates

    Discussion

    You call this method to bracket a series of method calls that begins with beginUpdates and that consists of operations to insert, delete, select, and reload rows and sections of the table view. When you call endUpdates, UITableView animates the operations simultaneously. Invocations of beginUpdates and endUpdates can be nested. If you do not make the insertion, deletion, and selection calls inside this block, table attributes such as row count can become invalid.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Inserts rows in the table view at the locations identified by an array of index paths, with an option to animate the insertion.

    Declaration

    Swift

    func insertRowsAtIndexPaths(_ indexPaths: [AnyObject], withRowAnimation animation: UITableViewRowAnimation)

    Objective-C

    - (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

    Parameters

    indexPaths

    An array of NSIndexPath objects, each representing a row index and section index that together identify a row in the table view.

    animation

    A constant that either specifies the kind of animation to perform when inserting the cell or requests no animation. See Table Cell Insertion and Deletion Animation for descriptions of the constants.

    Discussion

    UITableView calls the relevant delegate and data source methods immediately afterward to get the cells and other content for visible cells.

    When this method when is called in an animation block defined by the beginUpdates and endUpdates methods, UITableView defers any insertions of rows or sections until after it has handled the deletions of rows or sections. This order is followed regardless of how the insertion and deletion method calls are ordered. This is unlike inserting or removing an item in a mutable array, in which the operation can affect the array index used for the successive insertion or removal operation. For more on this subject, see Batch Insertion, Deletion, and Reloading of Rows and Sections in Table View Programming Guide for iOS.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Deletes the rows specified by an array of index paths, with an option to animate the deletion.

    Declaration

    Swift

    func deleteRowsAtIndexPaths(_ indexPaths: [AnyObject], withRowAnimation animation: UITableViewRowAnimation)

    Objective-C

    - (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

    Parameters

    indexPaths

    An array of NSIndexPath objects identifying the rows to delete.

    animation

    A constant that indicates how the deletion is to be animated, for example, fade out or slide out from the bottom. See Table Cell Insertion and Deletion Animation for descriptions of these constants.

    Discussion

    When this method is called in an animation block defined by the beginUpdates and endUpdates methods, UITableView defers any insertions of rows or sections until after it has handled the deletions of rows or sections. This order is followed regardless how the insertion and deletion method calls are ordered. This is unlike inserting or removing an item in a mutable array, in which the operation can affect the array index used for the successive insertion or removal operation. For more on this subject, see Batch Insertion, Deletion, and Reloading of Rows and Sections in Table View Programming Guide for iOS.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Moves the row at a specified location to a destination location.

    Declaration

    Swift

    func moveRowAtIndexPath(_ indexPath: NSIndexPath, toIndexPath newIndexPath: NSIndexPath)

    Objective-C

    - (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath

    Parameters

    indexPath

    An index path identifying the row to move.

    newIndexPath

    An index path identifying the row that is the destination of the row at indexPath. The existing row at that location slides up or down to an adjoining index position to make room for it.

    Discussion

    You can combine row-move operations with row-insertion and row-deletion operations within a beginUpdatesendUpdates block to have all changes occur together as a single animation.

    Unlike the row-insertion and row-deletion methods, this method does not take an animation parameter. For rows that are moved, the moved row animates straight from the starting position to the ending position. Also unlike the other methods, this method allows only one row to be moved per call. If you want multiple rows moved, you can call this method repeatedly within a beginUpdatesendUpdates block.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 5.0 and later.

  • Inserts one or more sections in the table view, with an option to animate the insertion.

    Declaration

    Swift

    func insertSections(_ sections: NSIndexSet, withRowAnimation animation: UITableViewRowAnimation)

    Objective-C

    - (void)insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation

    Parameters

    sections

    An index set that specifies the sections to insert in the table view. If a section already exists at the specified index location, it is moved down one index location.

    animation

    A constant that indicates how the insertion is to be animated, for example, fade in or slide in from the left. See Table Cell Insertion and Deletion Animation for descriptions of these constants.

    Discussion

    UITableView calls the relevant delegate and data source methods immediately afterward to get the cells and other content for visible cells.

    When this method is called in an animation block defined by the beginUpdates and endUpdates methods, UITableView defers any insertions of rows or sections until after it has handled the deletions of rows or sections. This order is followed regardless of how the insertion and deletion method calls are ordered. This is unlike inserting or removing an item in a mutable array, in which the operation can affect the array index used for the successive insertion or removal operation. For more on this subject, see Batch Insertion, Deletion, and Reloading of Rows and Sections in Table View Programming Guide for iOS.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Deletes one or more sections in the table view, with an option to animate the deletion.

    Declaration

    Swift

    func deleteSections(_ sections: NSIndexSet, withRowAnimation animation: UITableViewRowAnimation)

    Objective-C

    - (void)deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation

    Parameters

    sections

    An index set that specifies the sections to delete from the table view. If a section exists after the specified index location, it is moved up one index location.

    animation

    A constant that either specifies the kind of animation to perform when deleting the section or requests no animation. See Table Cell Insertion and Deletion Animation for descriptions of the constants.

    Discussion

    When this method when is called in an animation block defined by the beginUpdates and endUpdates methods, UITableView defers any insertions of rows or sections until after it has handled the deletions of rows or sections. This order is followed regardless how the insertion and deletion method calls are ordered. This is unlike inserting or removing an item in a mutable array, in which the operation can affect the array index used for the successive insertion or removal operation. For more on this subject, see Batch Insertion, Deletion, and Reloading of Rows and Sections in Table View Programming Guide for iOS.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Moves a section to a new location in the table view.

    Declaration

    Swift

    func moveSection(_ section: Int, toSection newSection: Int)

    Objective-C

    - (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection

    Parameters

    section

    The index of the section to move.

    newSection

    The index in the table view that is the destination of the move for the section. The existing section at that location slides up or down to an adjoining index position to make room for it.

    Discussion

    You can combine section-move operations with section-insertion and section-deletion operations within a beginUpdatesendUpdates block to have all changes occur together as a single animation.

    Unlike the section-insertion section row-deletion methods, this method does not take an animation parameter. For sections that are moved, the moved section animates straight from the starting position to the ending position. Also unlike the other methods, this method allows only one section to be moved per call. If you want multiple section moved, call this method repeatedly within a beginUpdatesendUpdates block.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 5.0 and later.

  • editing editing Property

    A Boolean value that determines whether the table view is in editing mode.

    Declaration

    Swift

    var editing: Bool

    Objective-C

    @property(nonatomic, getter=isEditing) BOOL editing

    Discussion

    When the value of this property is YEStrue, the table view is in editing mode: The cells of the table might show an insertion or deletion control on the left side of each cell and a reordering control on the right side, depending on how the cell is configured. (See UITableViewCell Class Reference for details.) Tapping a control causes the table view to invoke the data source method tableView:commitEditingStyle:forRowAtIndexPath:. The default value is NOfalse.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Toggles the table view into and out of editing mode.

    Declaration

    Swift

    func setEditing(_ editing: Bool, animated animate: Bool)

    Objective-C

    - (void)setEditing:(BOOL)editing animated:(BOOL)animate

    Parameters

    editing

    YEStrue to enter editing mode; NOfalse to leave it. The default value is NOfalse.

    animate

    YEStrue to animate the transition to editing mode; NOfalse to make the transition immediate.

    Discussion

    When you call this method with the value of editing set to YEStrue, the table view goes into editing mode by calling setEditing:animated: on each visible UITableViewCell object. Calling this method with editing set to NOfalse turns off editing mode. In editing mode, the cells of the table might show an insertion or deletion control on the left side of each cell and a reordering control on the right side, depending on how the cell is configured. (See UITableViewCell Class Reference for details.) The data source of the table view can selectively exclude cells from editing mode by implementing tableView:canEditRowAtIndexPath:.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

    See Also

    editing

  • Reloads the rows and sections of the table view.

    Declaration

    Swift

    func reloadData()

    Objective-C

    - (void)reloadData

    Discussion

    Call this method to reload all the data that is used to construct the table, including cells, section headers and footers, index arrays, and so on. For efficiency, the table view redisplays only those rows that are visible. It adjusts offsets if the table shrinks as a result of the reload. The table view’s delegate or data source calls this method when it wants the table view to completely reload its data. It should not be called in the methods that insert or delete rows, especially within an animation block implemented with calls to beginUpdates and endUpdates.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Reloads the specified rows using an animation effect.

    Declaration

    Swift

    func reloadRowsAtIndexPaths(_ indexPaths: [AnyObject], withRowAnimation animation: UITableViewRowAnimation)

    Objective-C

    - (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

    Parameters

    indexPaths

    An array of NSIndexPath objects identifying the rows to reload.

    animation

    A constant that indicates how the reloading is to be animated, for example, fade out or slide out from the bottom. See Table Cell Insertion and Deletion Animation for descriptions of these constants.

    The animation constant affects the direction in which both the old and the new rows slide. For example, if the animation constant is UITableViewRowAnimationRight, the old rows slide out to the right and the new cells slide in from the right.

    Discussion

    Reloading a row causes the table view to ask its data source for a new cell for that row. The table animates that new cell in as it animates the old row out. Call this method if you want to alert the user that the value of a cell is changing. If, however, notifying the user is not important—that is, you just want to change the value that a cell is displaying—you can get the cell for a particular row and set its new value.

    When this method is called in an animation block defined by the beginUpdates and endUpdates methods, it behaves similarly to deleteRowsAtIndexPaths:withRowAnimation:. The indexes that UITableView passes to the method are specified in the state of the table view prior to any updates. This happens regardless of ordering of the insertion, deletion, and reloading method calls within the animation block.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 3.0 and later.

  • Reloads the specified sections using a given animation effect.

    Declaration

    Swift

    func reloadSections(_ sections: NSIndexSet, withRowAnimation animation: UITableViewRowAnimation)

    Objective-C

    - (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation

    Parameters

    sections

    An index set identifying the sections to reload.

    animation

    A constant that indicates how the reloading is to be animated, for example, fade out or slide out from the bottom. See Table Cell Insertion and Deletion Animation for descriptions of these constants.

    The animation constant affects the direction in which both the old and the new section rows slide. For example, if the animation constant is UITableViewRowAnimationRight, the old rows slide out to the right and the new cells slide in from the right.

    Discussion

    Calling this method causes the table view to ask its data source for new cells for the specified sections. The table view animates the insertion of new cells in as it animates the old cells out. Call this method if you want to alert the user that the values of the designated sections are changing. If, however, you just want to change values in cells of the specified sections without alerting the user, you can get those cells and directly set their new values.

    When this method is called in an animation block defined by the beginUpdates and endUpdates methods, it behaves similarly to deleteSections:withRowAnimation:. The indexes that UITableView passes to the method are specified in the state of the table view prior to any updates. This happens regardless of ordering of the insertion, deletion, and reloading method calls within the animation block.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 3.0 and later.

  • Reloads the items in the index bar along the right side of the table view.

    Declaration

    Swift

    func reloadSectionIndexTitles()

    Objective-C

    - (void)reloadSectionIndexTitles

    Discussion

    This method gives you a way to update the section index after inserting or deleting sections without having to reload the whole table.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 3.0 and later.

    See Also

    sectionIndexTitlesForTableView: (UITableViewDataSource)

  • Returns the drawing area for a specified section of the table view.

    Declaration

    Swift

    func rectForSection(_ section: Int) -> CGRect

    Objective-C

    - (CGRect)rectForSection:(NSInteger)section

    Parameters

    section

    An index number identifying a section of the table view. Plain-style table views always have a section index of zero.

    Return Value

    A rectangle defining the area in which the table view draws the section.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns the drawing area for a row identified by index path.

    Declaration

    Swift

    func rectForRowAtIndexPath(_ indexPath: NSIndexPath) -> CGRect

    Objective-C

    - (CGRect)rectForRowAtIndexPath:(NSIndexPath *)indexPath

    Parameters

    indexPath

    An index path object that identifies a row by its index and its section index.

    Return Value

    A rectangle defining the area in which the table view draws the row or CGRectZero if indexPath is invalid.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns the drawing area for the footer of the specified section.

    Declaration

    Swift

    func rectForFooterInSection(_ section: Int) -> CGRect

    Objective-C

    - (CGRect)rectForFooterInSection:(NSInteger)section

    Parameters

    section

    An index number identifying a section of the table view. Plain-style table views always have a section index of zero.

    Return Value

    A rectangle defining the area in which the table view draws the section footer.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Returns the drawing area for the header of the specified section.

    Declaration

    Swift

    func rectForHeaderInSection(_ section: Int) -> CGRect

    Objective-C

    - (CGRect)rectForHeaderInSection:(NSInteger)section

    Parameters

    section

    An index number identifying a section of the table view. Plain-style table views always have a section index of zero.

    Return Value

    A rectangle defining the area in which the table view draws the section header.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • The object that acts as the data source of the table view.

    Declaration

    Swift

    unowned(unsafe) var dataSource: UITableViewDataSource?

    Objective-C

    @property(nonatomic, assign) id< UITableViewDataSource > dataSource

    Discussion

    The data source must adopt the UITableViewDataSource protocol. The data source is not retained.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

    See Also

    delegate

  • delegate delegate Property

    The object that acts as the delegate of the table view.

    Declaration

    Swift

    unowned(unsafe) var delegate: UITableViewDelegate?

    Objective-C

    @property(nonatomic, assign) id< UITableViewDelegate > delegate

    Discussion

    The delegate must adopt the UITableViewDelegate protocol. The delegate is not retained.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

    See Also

    dataSource

  • The number of table rows at which to display the index list on the right edge of the table.

    Declaration

    Swift

    var sectionIndexMinimumDisplayRowCount: Int

    Objective-C

    @property(nonatomic) NSInteger sectionIndexMinimumDisplayRowCount

    Discussion

    This property is applicable only to table views in the UITableViewStylePlain style. The default value is zero.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • The color to use for the table view’s index text.

    Declaration

    Swift

    var sectionIndexColor: UIColor?

    Objective-C

    @property(nonatomic, retain) UIColor *sectionIndexColor

    Discussion

    Table views can display an index along the side of the view, making it easier for users to navigate the contents of the table quickly. This property specifies the color to use for text displayed in this region. A value of nil represents the default color.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 6.0 and later.

  • The color to use for the background of the table view’s section index while not being touched.

    Declaration

    Swift

    var sectionIndexBackgroundColor: UIColor?

    Objective-C

    @property(nonatomic, retain) UIColor *sectionIndexBackgroundColor

    Discussion

    Table views can display an index along the side of the view, making it easier for users to navigate the contents of the table quickly. This property specifies the color to use for the background of the index. A value of nil represents the default color.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 7.0 and later.

  • The color to use for the table view’s index background area.

    Declaration

    Swift

    var sectionIndexTrackingBackgroundColor: UIColor?

    Objective-C

    @property(nonatomic, retain) UIColor *sectionIndexTrackingBackgroundColor

    Discussion

    Table views can display an index along the side of the view, making it easier for users to navigate the contents of the table quickly. This property specifies the color to display in the background of the index when the user drags a finger through it. A value of nil represents the default color.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 6.0 and later.

  • The style of the table view.

    Declaration

    Swift

    enum UITableViewStyle : Int { case Plain case Grouped }

    Objective-C

    typedef enum { UITableViewStylePlain, UITableViewStyleGrouped } UITableViewStyle;

    Constants

    • Plain

      UITableViewStylePlain

      A plain table view. Any section headers or footers are displayed as inline separators and float when the table view is scrolled.

      Available in iOS 2.0 and later.

    • Grouped

      UITableViewStyleGrouped

      A table view whose sections present distinct groups of rows. The section headers and footers do not float.

      Available in iOS 2.0 and later.

    Discussion

    You set the table style when you initialize the table view (see initWithFrame:style:). You cannot modify the style thereafter.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • The position in the table view (top, middle, bottom) to which a given row is scrolled.

    Declaration

    Swift

    enum UITableViewScrollPosition : Int { case None case Top case Middle case Bottom }

    Objective-C

    typedef enum { UITableViewScrollPositionNone, UITableViewScrollPositionTop, UITableViewScrollPositionMiddle, UITableViewScrollPositionBottom } UITableViewScrollPosition;

    Constants

    • None

      UITableViewScrollPositionNone

      The table view scrolls the row of interest to be fully visible with a minimum of movement. If the row is already fully visible, no scrolling occurs. For example, if the row is above the visible area, the behavior is identical to that specified by UITableViewScrollPositionTop. This is the default.

      Available in iOS 2.0 and later.

    • Top

      UITableViewScrollPositionTop

      The table view scrolls the row of interest to the top of the visible table view.

      Available in iOS 2.0 and later.

    • Middle

      UITableViewScrollPositionMiddle

      The table view scrolls the row of interest to the middle of the visible table view.

      Available in iOS 2.0 and later.

    • Bottom

      UITableViewScrollPositionBottom

      The table view scrolls the row of interest to the bottom of the visible table view.

      Available in iOS 2.0 and later.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • The type of animation when rows are inserted or deleted.

    Declaration

    Swift

    enum UITableViewRowAnimation : Int { case Fade case Right case Left case Top case Bottom case None case Middle case Automatic }

    Objective-C

    typedef enum { UITableViewRowAnimationFade, UITableViewRowAnimationRight, UITableViewRowAnimationLeft, UITableViewRowAnimationTop, UITableViewRowAnimationBottom, UITableViewRowAnimationNone, UITableViewRowAnimationMiddle, UITableViewRowAnimationAutomatic = 100 } UITableViewRowAnimation;

    Constants

    • Fade

      UITableViewRowAnimationFade

      The inserted or deleted row or rows fade into or out of the table view.

      Available in iOS 2.0 and later.

    • Right

      UITableViewRowAnimationRight

      The inserted row or rows slide in from the right; the deleted row or rows slide out to the right.

      Available in iOS 2.0 and later.

    • Left

      UITableViewRowAnimationLeft

      The inserted row or rows slide in from the left; the deleted row or rows slide out to the left.

      Available in iOS 2.0 and later.

    • Top

      UITableViewRowAnimationTop

      The inserted row or rows slide in from the top; the deleted row or rows slide out toward the top.

      Available in iOS 2.0 and later.

    • Bottom

      UITableViewRowAnimationBottom

      The inserted row or rows slide in from the bottom; the deleted row or rows slide out toward the bottom.

      Available in iOS 2.0 and later.

    • None

      UITableViewRowAnimationNone

      The inserted or deleted rows use the default animations.

      Available in iOS 3.0 and later.

    • Middle

      UITableViewRowAnimationMiddle

      The table view attempts to keep the old and new cells centered in the space they did or will occupy. Available in iPhone 3.2.

      Available in iOS 3.2 and later.

    • Automatic

      UITableViewRowAnimationAutomatic

      The table view chooses an appropriate animation style for you. (Introduced in iOS 5.0.)

      Available in iOS 5.0 and later.

    Import Statement

    Objective-C

    @import UIKit;

    Swift

    import UIKit

    Availability

    Available in iOS 2.0 and later.

  • Requests icon to be shown in the section index of a table view.

    Declaration

    Swift

    let UITableViewIndexSearch: String

    Objective-C

    UIKIT_EXTERN NSString *const UITableViewIndexSearch;

    Constants

    • UITableViewIndexSearch

      UITableViewIndexSearch

      If the data source includes this constant string in the array of strings it returns in sectionIndexTitlesForTableView:, the section index displays a magnifying glass icon at the corresponding index location. This location should generally be the first title in the index.

      Available in iOS 3.0 and later.

  • The default value for a given dimension.

    Declaration

    Swift

    let UITableViewAutomaticDimension: CGFloat

    Objective-C

    UIKIT_EXTERN const CGFloat UITableViewAutomaticDimension;

    Constants

    • UITableViewAutomaticDimension

      UITableViewAutomaticDimension

      Requests that UITableView use the default value for a given dimension.

      Available in iOS 5.0 and later.

    Discussion

    You return this value from UITableViewDelegate methods that request dimension metrics when you want UITableView to choose a default value. For example, if you return this constant in tableView:heightForHeaderInSection: or tableView:heightForFooterInSection:, UITableView uses a height that fits the value returned from tableView:titleForHeaderInSection: or tableView:titleForFooterInSection: (if the title is not nil).