# Titanium.UI.TableView

> A table view is used to present information, organized in sections and rows, in a vertically-scrolling view.

- Source: https://titaniumsdk.com/docs/sdk/13.0.1/Titanium.UI.TableView
- Titanium SDK version: 13.0.1
- Kind: view
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 0.8
- Extends: Titanium.UI.View
- Inheritance: Titanium.UI.View > Titanium.Proxy

| Android | iOS |
| ------- | --- |
| ![Android](./tableview_android.png) | ![iOS](./tableview_ios.png) |

A `TableView` object is a container for [TableViewSection](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewSection.md)
objects that are, in turn, containers for [TableViewRow](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md) objects.

Use the [Titanium.UI.createTableView](https://titaniumsdk.com/docs/sdk/Titanium.UI.md#createTableView) method or **`<TableView>`** Alloy element to create a `TableView`.

Also see the [TableViews guide](https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_How-tos/User_Interface_Deep_Dives/TableViews.html).

#### Creating Tables

There are few approaches to creating and using `TableView` object.

The simplest approach is to pass dictionaries of `TableViewRow` properties, such as
[backgroundColor](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#backgroundColor),
[color](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#color), and [title](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#title), to the
[createTableView](https://titaniumsdk.com/docs/sdk/Titanium.UI.md#createTableView) method, which causes the rows to be implictly
created, added to a single [TableViewSection](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewSection.md), and then added to
the `TableView`. Refer to the "Simple Table View with Basic Rows" example.

For more control over the layout of each row, however, [TableViewRow](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md)
objects can be created explicitly using the [Titanium.UI.createTableViewRow](https://titaniumsdk.com/docs/sdk/Titanium.UI.md#createTableViewRow) method. Child views,
such as [labels](https://titaniumsdk.com/docs/sdk/Titanium.UI.Label.md), [images](https://titaniumsdk.com/docs/sdk/Titanium.UI.ImageView.md), and
[buttons](https://titaniumsdk.com/docs/sdk/Titanium.UI.Button.md), may be added to each row. When one or more
[rows](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md) are added to the table view,
a single [TableViewSection](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewSection.md) is automatically created to hold the
rows. See the "Table View with Composite Layout" example.

Lastly, sets of rows may be explicitly created and added to a their own
[TableViewSection](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewSection.md) objects, which are then added to a `TableView`,
to enable the rows to be organized. Headers and footers titles or views must be configured
in order for the sections to be visible.

#### Tables and Scroll Views

As a table view inherently scrolls, it creates a very poor user experience when one contains
other scrolling views, such as a [ScrollableView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ScrollableView.md) or
[TextArea](https://titaniumsdk.com/docs/sdk/Titanium.UI.TextArea.md). Thus, this layout is strongly discouraged.

#### TextFields in Tables with SOFT_INPUT_ADJUST_PAN (Android)

When a [TextField](https://titaniumsdk.com/docs/sdk/Titanium.UI.TextField.md) is placed in a row near the bottom of a `TableView`,
in a window that is configured with
[SOFT_INPUT_ADJUST_PAN](https://titaniumsdk.com/docs/sdk/Titanium.UI.Android.md#SOFT_INPUT_ADJUST_PAN), it is expected for the
text field to automatically move to a visible position after it is focused and the software
keyboard displayed. However, due to a known problem caused by native Android's ListView behavior,
the keyboard is likely to completely obscure the text field.

To mitigate this, a `ScrollView` may be used instead of a table view, as demonstrated in the
[ScrollView](https://titaniumsdk.com/docs/sdk/Titanium.UI.ScrollView.md), "Scroll View as a Table View", example.

#### Row Editing and Moving Modes

Table views have an `editing` and a `moving` mode that may be activated to using their
respective [editing](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#editing) and [moving](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#moving)
properties. These allow rows to be deleted or re-ordered by the user, depending on each row's
[editable](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#editable) and [moveable](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#moveable)
property that are either explicitly set or inherited from the table.

There are two UI controls available for deleting table view rows, depending on the combination
of editing and moving modes enabled:

* "red icon delete" - a circular red icon is displayed on the left-hand side of a row, which
reveals a delete button on the right-hand side of that row when clicked.
* "swipe delete" - without either of the table editing or moving modes enabled, a left or right
swipe gesture on a row reveals a delete button on the right-hand side of the row.

Note that because the operating system handles the functionality of the swipe delete, the OS will
capture swipe events and not bubble the event to Titanium listeners. As such, if you rely on
swipe events, you must not set editing to true on such rows, and simulate the functionality you
need.

When `editable` and `moveable` properties are set on the table view, they are known as `inherited`,
whereas when set on a row, they are known as `explicit`. As their resulting behavior may not
follow their literal meaning, depending on the combination of `editing` and `moving` modes that
are enabled, a detailed description of the behavior follows.

With `editing:false` and `moving:true`:

* For red icon delete and swipe delete, inherited and explicit `editable` properties may be set.
* Inherited `moveable` property is always `true`. Explicit `moveable` property may be set.

With `editing:true` and `moving:false`:

* For red icon delete and swipe delete, inherited `editable` property is always `true`. Explicit
`editable` property may be set.
* Inherited and explicit `moveable` properties may be set.

With `editing:false` and `moving: false`:

* For red icon delete, inherited and explicit `editable` properties always `false`. For
swipe delete, inherited and explicit `editable` properties may be set.
* Inherited `moveable` property is always `false`.

With `editing:true` and `moving:true`:

* For red icon delete and swipe delete, inherited and explicit `editable` properties may be set.
* Inherited `moveable` property is always `true`. Explicit `moveable` property may be set.

## Example: Simple Table View

Create a basic table view.

``` js
Ti.UI.backgroundColor = 'white';
var win = Ti.UI.createWindow();

var tableData = [ {title: 'Apples'}, {title: 'Bananas'}, {title: 'Carrots'}, {title: 'Potatoes'} ];

var table = Ti.UI.createTableView({
  data: tableData
});
win.add(table);
win.open();
```

## Example: Table View Sections

Create a table with three sections, each with two rows. Add two sections to the table
before and one after it is rendered. This sample only works on Release 3.0 and later.

``` js
Ti.UI.backgroundColor = 'white';
var win = Ti.UI.createWindow();

var sectionFruit = Ti.UI.createTableViewSection({ headerTitle: 'Fruit' });
sectionFruit.add(Ti.UI.createTableViewRow({ title: 'Apples' }));
sectionFruit.add(Ti.UI.createTableViewRow({ title: 'Bananas' }));

var sectionVeg = Ti.UI.createTableViewSection({ headerTitle: 'Vegetables' });
sectionVeg.add(Ti.UI.createTableViewRow({ title: 'Carrots' }));
sectionVeg.add(Ti.UI.createTableViewRow({ title: 'Potatoes' }));

var table = Ti.UI.createTableView({
  data: [sectionFruit, sectionVeg]
});

win.add(table);
win.open();

var sectionFish = Ti.UI.createTableViewSection({ headerTitle: 'Fish' });
sectionFish.add(Ti.UI.createTableViewRow({ title: 'Cod' }));
sectionFish.add(Ti.UI.createTableViewRow({ title: 'Haddock' }));

table.insertSectionBefore(0, sectionFish);
```

## Example: Table View with Composite Layout

Create a table of rows that contain a custom child-view layout.

``` js
var win = Ti.UI.createWindow({
  backgroundColor: 'black',
  title: 'TableView Demo'
});

// generate random number, used to make each row appear distinct for this example
function randomInt(max){
  return Math.floor(Math.random() * max) + 1;
}

var IMG_BASE = 'images/';
var defaultFontSize = Ti.Platform.name === 'android' ? 16 : 14;

var tableData = [];

for (var i=1; i<=20; i++){
  var row = Ti.UI.createTableViewRow({
    className: 'forumEvent', // used to improve table performance
    backgroundSelectedColor: 'white',
    rowIndex: i, // custom property, useful for determining the row during events
    height: 110
  });

  var imageAvatar = Ti.UI.createImageView({
    image: IMG_BASE + 'custom_tableview/user.png',
    left: 10, top: 5,
    width: 50, height: 50
  });
  row.add(imageAvatar);

  var labelUserName = Ti.UI.createLabel({
    color: '#576996',
    font: {fontFamily:'Arial', fontSize: defaultFontSize+6, fontWeight: 'bold'},
    text: 'Fred Smith ' + i,
    left: 70, top: 6,
    width: 200, height: 30
  });
  row.add(labelUserName);

  var labelDetails = Ti.UI.createLabel({
    color: '#222',
    font: {fontFamily:'Arial', fontSize: defaultFontSize+2, fontWeight: 'normal'},
    text: 'Replied to post with id ' + randomInt(1000) + '.',
    left: 70, top: 44,
    width: 360
  });
  row.add(labelDetails);

  var imageCalendar = Ti.UI.createImageView({
    image: IMG_BASE + 'custom_tableview/eventsButton.png',
    left: 70, bottom: 2,
    width: 32, height: 32
  });
  row.add(imageCalendar);

  var labelDate = Ti.UI.createLabel({
    color: '#999',
    font: {fontFamily:'Arial', fontSize: defaultFontSize, fontWeight: 'normal'},
    text: 'on ' + randomInt(30) + ' Nov 2012',
    left: 105, bottom: 10,
    width: 200, height: 20
  });
  row.add(labelDate);

  tableData.push(row);
}

var tableView = Ti.UI.createTableView({
  backgroundColor: 'white',
  data: tableData
});

win.add(tableView);
win.open();
```

## Example: Alloy XML Markup

Previous table view sections example as an Alloy view.

``` xml
<Alloy>
    <Window id="win">
        <TableView id="table">
            <TableViewSection id="sectionFruit" headerTitle="Fruit">
                <TableViewRow title="Apple"/>
                <TableViewRow title="Bananas"/>
            </TableViewSection>
            <TableViewSection id="sectionVeg" headerTitle="Vegetables">
                <TableViewRow title="Carrots"/>
                <TableViewRow title="Potatoes"/>
            </TableViewSection>
            <TableViewSection id="sectionFish" headerTitle="Fish">
                <TableViewRow title="Cod"/>
                <TableViewRow title="Haddock"/>
            </TableViewSection>
        </TableView>
    </Window>
</Alloy>
```

## Properties

### allowsMultipleSelectionDuringEditing

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 10.1.0, iPhone 8.2.0, iPad 8.2.0, macOS 9.2.0
- Default: `false`

Determines whether multiple items of this table view can be selected at the same time while editing the table.

### allowsMultipleSelectionInteraction

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK iPhone 8.2.0, iPad 8.2.0, macOS 9.2.0
- Default: `false`

Allows a two-finger pan gesture to automatically transition the table view into editing mode and start selecting rows.

Setting this property to true allows the user to start selecting multiple contiguous rows via a two-finger pan gesture.
If the table view is already in editing mode, the user can also select multiple rows via a one-finger pan gesture along
the edge of the table that contains editing controls (checkboxes). In order to support this behavior,
you must also set [Titanium.UI.TableView.allowsMultipleSelectionDuringEditing](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#allowsMultipleSelectionDuringEditing) to true.
Once user interaction stops the [Titanium.UI.TableView.rowsselected](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#rowsselected) event is fired.

### allowsSelection

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK iPhone 8.2.0, iPad 8.2.0, macOS 9.2.0
- Default: `true`

Determines whether this table's rows can be selected.

Set to `false` to prevent rows from being selected.

### allowsSelectionDuringEditing

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 10.1.0, iPhone 5.4.0, iPad 5.4.0, macOS 9.2.0
- Default: `false`

Determines whether this table's rows can be selected while editing the table.

Set to `true` to allow rows to be selected.

### backgroundColor

- Type: String | Titanium.UI.Color
- Platforms: Android, iPhone, iPad, macOS
- Default: `transparent on non-iOS platforms, white on the iOS platform`

Background color of the view, as a color name or hex triplet.

For information about color values, see the "Colors" section of [Titanium.UI](https://titaniumsdk.com/docs/sdk/Titanium.UI.md).

### contentOffset

- Type: Point
- Platforms: Android
- Since: Titanium SDK 12.4.0

X and Y coordinates to which to reposition the top-left point of the content region.

### data

- Type: Array<Titanium.UI.TableViewRow> | Array<Titanium.UI.TableViewSection>
- Platforms: Android, iPhone, iPad, macOS

Rows of the table view.

### dimBackgroundForSearch

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 6.2.0
- Default: `true`

A Boolean indicating whether the underlying content is dimmed during a search.

If you do not want to show the dimmed background when clicking on the search bar,
set this property `false` during creation.

### editable

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 9.3.0, iPhone 3.2.0, iPad 3.2.0, macOS 9.2.0
- Default: `Depends on `editing` and `moving` mode`

Determines the rows' default editable behavior, which allows them to be deleted by the user
when the table is in `editing` or `moving` mode.

This property determines the default behavior of child rows, but may be overridden by
a row's [editable](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#editable) property.

See the [Titanium.UI.TableView](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md) description section for a full explanation of the TableView's
`editing` and `moving` modes.

### editing

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 9.3.0, iPhone 3.2.0, iPad 3.2.0, macOS 9.2.0
- Default: `false`

Determines whether row editing mode is active.

The `editing` mode allows rows to be deleted or re-ordered, depending on their
[editable](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#editable) and [moveable](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#moveable)
settings.

See the [Titanium.UI.TableView](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md) description section for a full explanation of the TableView's
`editing` and `moving` modes.

### filterAnchored

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.3.0
- Default: `false`

Determines whether the search is limited to the start of the string

Set to `true` to enable case anchored search.

### filterAttribute

- Type: String
- Platforms: Android, iPhone, iPad, macOS

Filter attribute to be used when searching.

On the Android platform, this property can only be set to Titanium-defined properties of the
TableViewRow object, such as `title`.  To search text stored in a different attribute, set the `title`
property of the TableViewRow object to the property to be searched. For example:

``` js
var label = Ti.UI.createLabel({text: 'Foobar'}),
var row = Ti.UI.createTableViewRow(title: label.text);
row.add(label);
```

On the iOS platform, this property can be set to any property on the TableViewRow object,
including arbitrary properties set on the object, not only Titanium-defined properties.

Note that the filter is not anchored to the beginning of the string. So typing "ha"
in the text box will include rows titled 'Harold' and 'Harvard', but also 'Sharon'
and 'Jonathan'.

### filterCaseInsensitive

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Default: `true`

Determines whether the search is case insensitive.

Set to `false` to enable case sensitive search.

### fixedSize

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 11.0.0
- Default: `false`

Sets fixedSize mode on Android TableView.

Set it to `true` if all TableView items have the same size to gain some performance.

### footerDividersEnabled

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 3.3.0
- Default: `undefined but behaves as false`

When set to false, the ListView will not draw the divider before the footer view.

### footerTitle

- Type: String
- Platforms: Android, iPhone, iPad, macOS

Table view footer title.

### footerView

- Type: Titanium.UI.View
- Platforms: Android, iPhone, iPad, macOS

Table view footer as a view that will be rendered instead of a label.

In Alloy you can use a `<FooterView>` element nested in a `<TableView>` element:

``` xml
<Alloy>
    <TableView>
        <FooterView>
            <View backgroundColor="#a00" height="50dp"/>
        </FooterView>
        <TableViewRow><Label>Row 1</Label></TableViewRow>
        <TableViewRow><Label>Row 2</Label></TableViewRow>
    </TableView>
</Alloy>
```

### headerDividersEnabled

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 3.3.0
- Default: `undefined but behaves as false`

When set to false, the ListView will not draw the divider after the header view.

### headerPullView

- Type: Titanium.UI.View
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 2.1.0

View positioned above the first row that is only revealed when the user drags the table
contents down.

A `headerPullView` is a UI control that is often used to provide a convenient way for the
user to refresh a table's data.  Typically used with the
[setContentInsets](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#setContentInsets) method.

To specify the wrapper color see [Titanium.UI.View.pullBackgroundColor](https://titaniumsdk.com/docs/sdk/Titanium.UI.View.md#pullBackgroundColor).

For an example, see the "Pull to refresh" section in the
[TableViews guide](https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_How-tos/User_Interface_Deep_Dives/TableViews.html).

Alloy applications can use a `<HeaderPullView>` element inside a `<TableView>` element.

``` xml
<Alloy>
    <TableView>
        <HeaderPullView platform="ios">
            <View class="pull">
                <Label color="#F2F4F4" bottom="25dp">Header pull view</Label>
            </View>
        </HeaderPullView>
    </TableView>
</Alloy>
```

### headerTitle

- Type: String
- Platforms: Android, iPhone, iPad, macOS

Table view header title.

### headerView

- Type: Titanium.UI.View
- Platforms: Android, iPhone, iPad, macOS

Table view header as a view that will be rendered instead of a label.

In Alloy you can use a `<HeaderView>` element nested in a `<TableView>` element:

``` js
<Alloy>
    <TableView>
        <HeaderView>
            <View backgroundColor="#a00" height="50dp"/>
        </HeaderView>
        <TableViewRow><Label>Row 1</Label></TableViewRow>
        <TableViewRow><Label>Row 2</Label></TableViewRow>
    </TableView>
</Alloy>
```

### hideSearchOnSelection

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Default: `true`

Determines whether the search field should hide on completion.

Set to `false` to prevent the search field from being hidden when an item in the search
results is clicked.

Many standard applications (such as Contacts) have a behavior equivalent to `false` for this
value, but the default is `true` for legacy reasons.

The Android platform behaves as though this value were `false`.

### index

- Type: Array<TableViewIndexEntry>
- Platforms: iPhone, iPad, macOS

Array of objects (with `title` and `index` properties) to control the table view index.

If an index array is specified, an index bar is displayed on the right-hand side of the
table view. Clicking on a title in the index bar scrolls the table view to the row
index associated with that title. If the index is -1 the table view will scroll to the top.

### keyboardDismissMode

- Type: Number
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 12.2.0
- Default: `Undefined (behaves like <Titanium.UI.iOS.KEYBOARD_DISMISS_MODE_NONE>)`

The manner in which the keyboard is dismissed when a drag begins in the table view.

Accepts: `Titanium.UI.iOS.KEYBOARD_DISMISS_MODE_INTERACTIVE`, `Titanium.UI.iOS.KEYBOARD_DISMISS_MODE_NONE`, `Titanium.UI.iOS.KEYBOARD_DISMISS_MODE_ON_DRAG`

### maxClassname

- Type: Number
- Platforms: Android
- Since: Titanium SDK 5.2.0
- Default: `32`

Max number of row class names.

See [Titanium.UI.TableViewRow.className](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#className) for more details. This property will default to
32 when it is set to a number lesser than that.

### maxRowHeight

- Type: Number
- Platforms: Android, iPhone, iPad, macOS

Maximum row height for table view rows.

### minRowHeight

- Type: Number
- Platforms: Android, iPhone, iPad, macOS

Minimum row height for table view rows.

### moveable

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 9.3.0, iPhone 3.2.0, iPad 3.2.0, macOS 9.2.0
- Default: `Depends on `editing` and `moving` mode`

Determines the rows' default moveable behavior, which allows them to be re-ordered by the
user when the table is in `editing` or `moving` mode.

This property determines the default behavior of child rows, but may be overridden by a
row's [moveable](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#moveable) property.

See the [Titanium.UI.TableView](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md) description section for a full explanation of the TableView's
`editing` and `moving` modes.

### moving

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 9.3.0, iPhone 3.2.0, iPad 3.2.0, macOS 9.2.0
- Default: `false`

Determines whether row moving mode is active.

The `moving` mode allows rows to be deleted or re-ordered, depending on their
[editable](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#editable) and [moveable](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#moveable)
settings.

See the [Titanium.UI.TableView](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md) description section for a full explanation of the TableView's
`editing` and `moving` modes.

### overScrollMode

- Type: Number
- Platforms: Android
- Since: Titanium SDK 3.1.0
- Default: `Titanium.UI.Android.OVER_SCROLL_ALWAYS`

Determines the behavior when the user overscrolls the view.

Accepts: `Titanium.UI.Android.OVER_SCROLL_ALWAYS`, `Titanium.UI.Android.OVER_SCROLL_IF_CONTENT_SCROLLS`, `Titanium.UI.Android.OVER_SCROLL_NEVER`

### refreshControl

- Type: Titanium.UI.RefreshControl
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 6.2.0, iPhone 3.2.0, iPad 3.2.0

View positioned above the first row that is only revealed when the user drags the list view contents down.

An alternate to the headerPullView property. See [Titanium.UI.RefreshControl](https://titaniumsdk.com/docs/sdk/Titanium.UI.RefreshControl.md) for usage and examples.

### resultsBackgroundColor

- Type: String | Titanium.UI.Color
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 7.3.0
- Default: `undefined (behaves as white)`

The background color of the search results (iOS-only).

For information about color values, see the "Colors" section of [Titanium.UI](https://titaniumsdk.com/docs/sdk/Titanium.UI.md).
Note: A transparent background-color is not officially supported by Apple to
prevent that the list of results overlaps with the list view below it.

### resultsSeparatorColor

- Type: String | Titanium.UI.Color
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 7.3.0
- Default: `undefined (behaves as gray)`

Separator line color between rows inside search results,
as a color name or hex triplet (iOS-only).

To make the line invisible, set this property to `transparent`, or the same value as the
[backgroundColor](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#backgroundColor) property.
For information about color values, see the "Colors" section of [Titanium.UI](https://titaniumsdk.com/docs/sdk/Titanium.UI.md).

### resultsSeparatorInsets

- Type: HorizontalInsets
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 7.3.0

The insets for search results separators (applies to all cells & iOS-only).

Cell separators do not extend all the way to the edge of the list view.
This property sets the default inset for all cells in the table.
Set this to a dictionary with two keys, `left` specifying inset from left edge and `right`
specifying the inset from the right edge.

### resultsSeparatorStyle

- Type: Number
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 7.3.0

The separator style of the search results (iOS-only).

Accepts: `Titanium.UI.TABLE_VIEW_SEPARATOR_STYLE_NONE`, `Titanium.UI.TABLE_VIEW_SEPARATOR_STYLE_SINGLE_LINE`

### rowHeight

- Type: Number
- Platforms: Android, iPhone, iPad, macOS

Default row height for table view rows.

### rowSeparatorInsets

- Type: HorizontalInsets
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 5.2.0

The insets for table view cells (applies to all cells).

Cell separators do not extend all the way to the edge of the table view. Set this to a
dictionary with two keys, `left` specifying inset from left edge and `right` specifying the inset from the
right edge. This property is only available upon creation of the cells.

For example:
``` js
tableView1.rowSeparatorInsets = {
    left: 10,
    right: 10
};
```

### scrollable

- Type: Boolean
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 7.3.0
- Default: `true`

If `true`, the tableview can be scrolled.

### scrollIndicatorStyle

- Type: Number
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 2.1.0
- Default: `<Titanium.UI.iOS.ScrollIndicatorStyle.DEFAULT>`

Style of the scrollbar.

Accepts: `Titanium.UI.iOS.ScrollIndicatorStyle.BLACK`, `Titanium.UI.iOS.ScrollIndicatorStyle.DEFAULT`, `Titanium.UI.iOS.ScrollIndicatorStyle.WHITE`

### scrollsToTop

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 2.1.2
- Default: `true`

Controls whether the scroll-to-top gesture is effective.

The scroll-to-top gesture is a tap on the status bar; The default value of this property is true.
This gesture works when you have a single visible table view.
If there are multiple table views, web views, text areas, and/or scroll views visible,
you will need to disable (set to false) on the above views you DON'T want this
behaviour on. The remaining view will then respond to scroll-to-top gesture.

### search

- Type: Titanium.UI.SearchBar | Titanium.UI.Android.SearchView
- Platforms: Android, iPhone, iPad, macOS

Search field to use for the table view.

In an Alloy application, you can use a `<SearchView>` or `<SearchBar>` element inside a `<TableView>` element.

``` xml
<Alloy>
    <TableView>
      <!-- search, shorthand with Ti.UI.SearchBar -->
      <SearchBar platform="ios"/>
      <!-- search, shorthand with Ti.UI.Android.SearchView -->
      <SearchView ns="Ti.UI.Android" platform="android"/>
    </TableView>
</Alloy>
```

### searchAsChild

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 3.0.2
- Default: `true`

Determines whether the [SearchBar](https://titaniumsdk.com/docs/sdk/Titanium.UI.SearchBar.md) or [SearchView](https://titaniumsdk.com/docs/sdk/Titanium.UI.Android.SearchView.md) appears as part of the TableView.

Set to false if the search view will be displayed in the action bar.

### searchHidden

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Default: `false (search field visible)`

Determines whether the search field is visible.

Set to `true` to hide the search field.

### sectionCount

- Type: Number
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.0.0
- Permission: read-only

Number of sections in this table view.

### sectionHeaderTopPadding

- Type: Number
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 10.1.0
- Requires: iOS 15.0+

Padding above each section header.

If not set or set to `-1`, it defaults to an automatic spacing determined by the system.

### sections

- Type: Array<Titanium.UI.TableViewSection>
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 3.1.0, iPhone 3.0.0, iPad 3.0.0

Sections of this table.

In Release 3.0, this property is read-only on Android.

Due to a known issue, TIMOB-12616, the `sections` property should not be used
for adding sections on iOS.

### separatorColor

- Type: String | Titanium.UI.Color
- Platforms: Android, iPhone, iPad, macOS
- Default: `platform-specific default color`

Separator line color between rows, as a color name or hex triplet.

To make the line invisible, set this property to `transparent`, or the same value as the
[backgroundColor](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#backgroundColor) property.

For information about color values, see the "Colors" section of [Titanium.UI](https://titaniumsdk.com/docs/sdk/Titanium.UI.md).

### separatorInsets

- Type: HorizontalInsets
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.2.0
- DEPRECATED since 5.2.0. Use [Titanium.UI.TableView.tableSeparatorInsets](Titanium.UI.TableView.tableSeparatorInsets) instead.

The insets for table view separators (applies to all cells).

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. Set this to a dictionary
with two keys, `left` specifying inset from left edge and `right` specifying the inset from the right edge.

For example:
``` js
tableView1.separatorInsets = {
    left: 10,
    right: 10
};
```

### separatorStyle

- Type: Number
- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 5.2.0

Separator style constant.

Accepts: `Titanium.UI.TABLE_VIEW_SEPARATOR_STYLE_NONE`, `Titanium.UI.TABLE_VIEW_SEPARATOR_STYLE_SINGLE_LINE`

### showSearchBarInNavBar

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 8.1.0
- Default: `false`

A Boolean indicating whether search bar will be in navigation bar.

If you want to show the search bar in navigation bar, set this property `true` during creation.
Use the [Titanium.UI.Window.hidesSearchBarWhenScrolling](https://titaniumsdk.com/docs/sdk/Titanium.UI.Window.md#hidesSearchBarWhenScrolling) property to control the visibility of the
searchbar when scrolling.

### showSelectionCheck

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 10.1.0
- Default: `true`

Determines whether the selection checkmark is displayed on selected rows.

### showVerticalScrollIndicator

- Type: Boolean
- Platforms: iPhone, iPad, macOS
- Default: `true`

Determines whether this table view displays a vertical scroll indicator.

Set to `false` to hide the vertical scroll indicator.

### style

- Type: Number
- Platforms: iPhone, iPad, macOS

Style of the table view, specified using one of the constants from
[Titanium.UI.iOS.TableViewStyle](https://titaniumsdk.com/docs/sdk/Titanium.UI.iOS.TableViewStyle.md).

Style should always be set before setting the `data` on table view.

Accepts: `Titanium.UI.iOS.TableViewStyle.GROUPED`, `Titanium.UI.iOS.TableViewStyle.INSET_GROUPED`, `Titanium.UI.iOS.TableViewStyle.PLAIN`

### tableSeparatorInsets

- Type: HorizontalInsets
- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 5.2.0

The insets for the table view header and footer.

Cell separators do not extend all the way to the edge of the table view. Set this to a
dictionary with two keys, `left` specifying inset from left edge and `right` specifying the inset from the
right edge. If the rowSeparatorInsets is not set, the tableSeparatorInsets will also set the cell insets.

For example:
``` js
tableView1.tableSeparatorInsets = {
    left: 10,
    right: 10
};
```

### touchFeedback

- Type: Boolean
- Platforms: Android
- Since: Titanium SDK 10.0.0
- Default: `true`

A material design visual construct that provides an instantaneous visual confirmation of touch point.

Touch feedback is only applied to a view's background.

## Methods

### appendRow

- Platforms: Android, iPhone, iPad, macOS

Appends a single row or an array of rows to the end of the table.

Each row can be passed as a [TableViewRow](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md) object, or as
dictionary specifying the properties for a table row, in which case this `TableView` will
create `TableViewRow` objects as needed.

On iOS, the row(s) can be inserted with animation by specifying a `properties` parameter.

Parameters:

- `row` (Titanium.UI.TableViewRow | Dictionary<Titanium.UI.TableViewRow> | Array<Titanium.UI.TableViewRow> | Array<Dictionary<Titanium.UI.TableViewRow>>): Row or rows to add to the table.
- `animation` (TableViewAnimationProperties, optional): Animation properties. (iOS only.)

### appendSection

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.0.0

Appends a single section or an array of sections to the end of the table.

Each section can be passed as a [TableViewSection](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewSection.md) object, or as
dictionary specifying the properties for a table section, in which case this `TableView` will
create `TableViewSection` objects as needed.

On iOS, the section(s) can be inserted with animation by specifying a `properties` parameter.

Due to a known issue, TIMOB-12616, this method should not be used for adding sections on iOS.

Parameters:

- `section` (Titanium.UI.TableViewSection | Dictionary<Titanium.UI.TableViewSection> | Array<Titanium.UI.TableViewSection> | Array<Dictionary<Titanium.UI.TableViewSection>>): Section or section to add to the table.
- `animation` (TableViewAnimationProperties, optional): Animation properties. (iOS only.)

### deleteRow

- Platforms: Android, iPhone, iPad, macOS

Deletes an existing row.

On iOS, the row can be deleted with animation by specifying a `properties` parameter.
Starting in SDK 3.1.0, the row can be specified using [Titanium.UI.TableViewRow](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md) on Android and iOS.

Parameters:

- `row` (Number | Titanium.UI.TableViewRow): Index of the row to delete, or the row object to delete.
- `animation` (TableViewAnimationProperties, optional): Animation properties. (iOS only.)

### deleteSection

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.0.0

Deletes an existing section.

On iOS, the section can be deleted with animation by specifying a `properties` parameter.

Parameters:

- `section` (Number): Index of the section to delete.
- `animation` (TableViewAnimationProperties, optional): Animation properties. (iOS only.)

### deselectRow

- Platforms: iPhone, iPad, macOS

Programmatically deselects a row.

Parameters:

- `row` (Number): Row index to deselect.

### insertRowAfter

- Platforms: Android, iPhone, iPad, macOS

Inserts a row after another row.

Each row can be passed as a [TableViewRow](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md) object, or as
dictionary specifying the properties for a table row, in which case this `TableView` will
create `TableViewRow` objects as needed.

On iOS, the row(s) may be inserted with animation by setting the `animation` parameter.

Parameters:

- `index` (Number): Index of the row to insert after.
- `row` (Titanium.UI.TableViewRow | Dictionary<Titanium.UI.TableViewRow>): Row to insert.
- `animation` (TableViewAnimationProperties, optional): Animation properties. (iOS only.)

### insertRowBefore

- Platforms: Android, iPhone, iPad, macOS

Inserts a row before another row.

Each row can be passed as a [TableViewRow](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md) object, or as
dictionary specifying the properties for a table row, in which case this `TableView` will
create `TableViewRow` objects as needed.

On iOS, the row(s) may be inserted with animation by setting the `animation` parameter.

Parameters:

- `index` (Number): Index of the row to insert before.
- `row` (Titanium.UI.TableViewRow | Dictionary<Titanium.UI.TableViewRow>): Row to insert.
- `animation` (TableViewAnimationProperties, optional): Animation properties. (iOS only.)

### insertSectionAfter

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.0.0

Inserts a section after another section.

Each section can be passed as a [TableViewSection](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewSection.md) object, or as
dictionary specifying the properties for a table section, in which case this `TableView` will
create `TableViewSection` objects as needed.

On iOS, the section(s) may be inserted with animation by setting the `animation` parameter.

Due to a known issue, TIMOB-12616, this method should not be used for adding sections on iOS.

Parameters:

- `index` (Number): Index of the section to insert after.
- `section` (Titanium.UI.TableViewSection | Dictionary<Titanium.UI.TableViewSection>): section to insert.
- `animation` (TableViewAnimationProperties, optional): Animation properties. (iOS only.)

### insertSectionBefore

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.0.0

Inserts a section before another section.

Each section can be passed as a [TableViewSection](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewSection.md) object, or as
dictionary specifying the properties for a table section, in which case this `TableViewSection` will
create `TableViewSection` objects as needed.

On iOS, the section(s) may be inserted with animation by setting the `animation` parameter.

Due to a known issue, TIMOB-12616, this method should not be used for adding sections on iOS.

Parameters:

- `index` (Number): Index of the section to insert before.
- `section` (Titanium.UI.TableViewSection | Dictionary<Titanium.UI.TableViewSection>): section to insert.
- `animation` (TableViewAnimationProperties, optional): Animation properties. (iOS only.)

### scrollToIndex

- Platforms: Android, iPhone, iPad, macOS

Scrolls the table view to ensure that the specified row is on screen.

On iOS, specify a [TableViewAnimationProperties](https://titaniumsdk.com/docs/sdk/TableViewAnimationProperties.md) object to control the position that
the selected row is scrolled to, and whether scrolling is animated.

Parameters:

- `index` (Number): Row index to scroll to.
- `animation` (TableViewAnimationProperties, optional): Animation properties.

### scrollToTop

- Platforms: Android, iPhone, iPad, macOS

Scrolls the table to a specific top position where 0 is the topmost y position in the
table view.

The behavior of this method is platform-specific.

On Android, the `top` value is interpreted as a row index that should be scrolled
to the top of the screen. The table will not scroll the last row of data higher than
the bottom of the screen. If there is less than one screenful of data below the
specified row, the table doesn't scroll the specified row all the way to the top.
If the table has less than one screenful of data total, it does not scroll at all.

On iOS, the `top` value is interpreted as a pixel offset between the top of the top
row of data and the top of the table view. So a `top` value of 0 scrolls the list to
the top. A positive value scrolls it down, and a negative value scrolls the list up
above the first item.

On iOS, specify a [TableViewAnimationProperties](https://titaniumsdk.com/docs/sdk/TableViewAnimationProperties.md) object with `animated` set to `false` to
disable the scrolling animation.

Parameters:

- `top` (Number): Y position for the top of the table view.
- `animation` (TableViewAnimationProperties, optional): Animation properties.

### selectRow

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK iPhone 1.8.2, iPad 1.8.2, Android 3.0.0

Programmatically selects a row. In Android, it sets the currently selected item. If in touch mode,
the item will not be selected but it will still be positioned appropriately. If the specified
selection position is less than 0, then the item at position 0 will be selected.

Parameters:

- `row` (Number): Row index to select.

### setContentInsets

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 2.1.0

Sets this tableview's content insets.

A table view is essentially a scroll view that contains a set of static row views that
represents the content. Thus, the `setContentInsets` method facilitates a margin, or inset,
distance between the content and the container scroll view.

Typically used with the [headerPullView](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#headerPullView) property.

Parameters:

- `edgeInsets` (Padding): Sets the distance that the content view is inset from the enclosing scroll view of the table. For example: ``` js setContentInset({ top: 50, bottom: 10, right: 10, left: 10 }, { animated: true }); ```
- `options` (AnimatedWithDurationOptions, optional): Determines whether, and how, the content inset change should be animated. Note that the default here is equivalent to passing in `{ animated: false }`

### setContentOffset

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 10.1.0, iPhone 3.4.0, iPad 3.4.0, macOS 9.2.0

Sets the value of the content offset of the table view without animation by default.

Parameters:

- `contentOffset` (Point): Dictionary with the properties `x`, `y`. The `x` and `y` coordinates reposition the top-left point of the scrollable region of the table view.
- `options` (AnimatedOptions, optional): Pass in `{ animated: true }` to animate the transition. Note that the default here is equivalent to passing in `{ animated: false }` Default: `{ animated: false }`.

### setData

- Platforms: Android, iPhone, iPad, macOS

Sets the data in the table.

Each row can be passed as a [TableViewRow](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md) object, or as
dictionary specifying the properties for a table row, in which case this `TableView` will
create `TableViewRow` objects as needed.

`setData` can also be used to add [TableViewSection](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewSection.md)s to a
table view.

Parameters:

- `data` (Array<Titanium.UI.TableViewRow> | Array<Dictionary<Titanium.UI.TableViewRow>> | Array<Titanium.UI.TableViewSection>): Rows or sections to add to this table.
- `animation` (TableViewAnimationProperties, optional): Animation properties. (iOS only.)

### setHeaderPullView

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 2.1.0
- DEPRECATED since 10.0.0, removed in 10.0.0. Use the <Titanium.UI.TableView.headerPullView> property instead.

Sets the value of the [Titanium.UI.TableView.headerPullView] property.

Parameters:

- `view` (Titanium.UI.View): View to display.

### updateRow

- Platforms: Android, iPhone, iPad, macOS

Updates an existing row, optionally with animation.

Parameters:

- `index` (Number): Index of the row to update.
- `row` (Titanium.UI.TableViewRow): Row data to update.
- `animation` (TableViewAnimationProperties): Animation properties. (iOS only.)

### updateSection

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.0.0

Updates an existing section, optionally with animation.

Known issues:

*   On iOS, event listeners do not fire correctly after table view sections are
    updated using the `updateSection` methods.
    ([TIMOB-12616](https://jira-archive.titaniumsdk.com/TIMOB-12616)

Parameters:

- `index` (Number): Index of the section to update.
- `section` (Titanium.UI.TableViewSection): section data to update.
- `animation` (TableViewAnimationProperties): Animation properties. (iOS only.)

## Events

### click

- Platforms: Android, iPhone, iPad, macOS

Fired when a table row is clicked by the user.

Event properties:

- `detail` (Boolean): Indicates whether the detail button was clicked. Only `true` if `row.hasDetail` is `true` and the detail button was clicked.
- `index` (Number): Row index.
- `row` (Titanium.UI.TableViewRow): Table view row object.
- `rowData` (Dictionary<Titanium.UI.TableViewRow>): Properties of the row. When the row is created implicitly using a JavaScript dictionary object, use this property rather than `row` to access any custom row properties. Here's an example of creating a row implicitly, which is not the recommended way. ``` js var data = [{title:'Row 1', hasChild:true, color:'red', selectedColor:'#fff', special:'special 1'},]; var table = Ti.UI.createTableView({data: data}); ```
- `searchMode` (Boolean): Indicates whether the table is in search mode.
- `section` (Titanium.UI.TableViewSection): Table view section object, if the clicked row is contained in a section.
- `x` (Number): X coordinate of the event from the `source` view's coordinate system.
- `y` (Number): Y coordinate of the event from the `source` view's coordinate system.

### delete

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 10.0.0

Fired when a table row is deleted by the user.

Event properties:

- `detail` (Boolean): Indicates whether the delete button was clicked. Always `false` for this event.
- `index` (Number): Row index.
- `row` (Titanium.UI.TableViewRow): Table view row object.
- `rowData` (Dictionary<Titanium.UI.TableViewRow>): Properties of the row. Use this property rather than `row` to access any custom row properties.
- `searchMode` (Boolean): Indicates whether the table is in search mode. Always `false` for this event.
- `section` (Titanium.UI.TableViewSection): Table view section object, if the deleted row is contained in a section.
- `x` (Number): X coordinate of the event from the `source` view's coordinate system.
- `y` (Number): Y coordinate of the event from the `source` view's coordinate system.

### doubletap

- Platforms: Android, iPhone, iPad, macOS

Fired when the device detects a double tap against this view.

Event properties:

- `index` (Number): Row index.
- `row` (Titanium.UI.TableViewRow): Table view row object.
- `rowData` (Dictionary<Titanium.UI.TableViewRow>): Properties of the row. When the row is created implicitly using a JavaScript dictionary object, use this property rather than `row` to access any custom row properties. Here's an example of creating a row implicitly, which is not the recommended way. ``` js var data = [{title:'Row 1', hasChild:true, color:'red', selectedColor:'#fff', special:'special 1'},]; var table = Ti.UI.createTableView({data: data}); ```
- `x` (Number): X coordinate of the event from the `source` view's coordinate system.
- `y` (Number): Y coordinate of the event from the `source` view's coordinate system.

### dragend

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.0.0

Fired when the scrollable region stops being dragged.

A dragging gesture is when a touch remains in contact with the display to physically drag
the view, as opposed to it being the result of scrolling momentum.

Event properties:

- `decelerate` (Boolean): Indicates whether scrolling will continue but decelerate, now that the drag gesture has been released by the touch. If `false`, scrolling will stop immediately.

### dragstart

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.0.0

Fired when the scrollable region starts being dragged.

A dragging gesture is when a touch remains in contact with the display to physically drag
the view, as opposed to it being the result of scrolling momentum.

### editaction

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 12.4.0

Fired when the user interacts with one of the custom edit actions defined by [Titanium.UI.TableViewRow.editActions](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableViewRow.md#editActions).

Do not rely on the `source` property to determine which item fired the event.  Use the
`row` and `section`, or the `index` to determine the table row that generated
the event.

Note that the `index` property of this event correspond to the list view state
before the user action.

Event properties:

- `action` (String): The [title](https://titaniumsdk.com/docs/sdk/RowActionType.md#title) as defined in the row action object.
- `identifier` (String): The [identifier](RowActionType. identifier) of the row action. Only included in the event if previously defined.
- `row` (Titanium.UI.TableViewRow | Dictionary<Titanium.UI.TableViewRow>): The row that fired this event.
- `section` (Titanium.UI.TableViewSection): The section that fired this event.
- `index` (Number): The index of the row that fired this event.

### indexclick

- Platforms: iPhone, iPad, macOS
- Since: Titanium SDK 3.4.0

Fired when the index bar is clicked by the user.

If the tabe view contains the [index](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#index) array of indices the index bar will appear on the side.
This event will fire when this bar is clicked

Event properties:

- `title` (String): The title of the index clicked.
- `index` (Number): The index number clicked.

### longpress

- Platforms: Android, iPhone, iPad, macOS

Fired when the device detects a long press.

A long press is generated by touching and holding on the touchscreen. Unlike a `longclick`,
it does not respond to the trackball button.

The event occurs before the finger is lifted.

A `longpress` and a `longclick` can occur together.

In contrast to a `longclick`, this event returns the `x` and `y` coordinates of the touch.

Event properties:

- `index` (Number): Row index.
- `row` (Titanium.UI.TableViewRow): Table view row object.
- `rowData` (Dictionary<Titanium.UI.TableViewRow>): Properties of the row. When the row is created implicitly using a JavaScript dictionary object, use this property rather than `row` to access any custom row properties. Here's an example of creating a row implicitly, which is not the recommended way. ``` js var data = [{title:'Row 1', hasChild:true, color:'red', selectedColor:'#fff', special:'special 1'},]; var table = Ti.UI.createTableView({data: data}); ```
- `y` (Number): Y coordinate of the event from the `source` view's coordinate system.
- `x` (Number): X coordinate of the event from the `source` view's coordinate system.

### move

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 9.3.0, iPhone 3.2.0, iPad 3.2.0, macOS 9.2.0

Fired when a table row is moved by the user.

Event properties:

- `detail` (Boolean): Boolean to indicate if the right area was clicked. Always `false` for this event.
- `index` (Number): Row index.
- `searchMode` (Boolean): Boolean to indicate if the table is in search mode. Always `false` for this event.
- `section` (Titanium.UI.TableViewSection): Table view section object, if the deleted row is contained in a section.
- `row` (Titanium.UI.TableViewRow): Table view row object.
- `rowData` (Dictionary<Titanium.UI.TableViewRow>): Properties of the row. Use this property rather than `row` to access any custom row properties.
- `x` (Number): X coordinate of the event from the `source` view's coordinate system.
- `y` (Number): Y coordinate of the event from the `source` view's coordinate system.

### rowsselected

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK Android 10.1.0, iPhone 8.2.0, iPad 8.2.0, macOS 9.2.0

Fired when user stops two-pan gesture interaction for selecting multiple rows.
It is used in conjunction with [Titanium.UI.TableView.allowsMultipleSelectionInteraction](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#allowsMultipleSelectionInteraction).

Event properties:

- `selectedRows` (Array<SelectedRowObject>): List of rows selected by user.
- `startingRow` (SelectedRowObject): First row selected when user started interaction.

### scroll

- Platforms: Android, iPhone, iPad, macOS

Fired when the table view is scrolled.

Event properties:

- `contentOffset` (Point): Dictionary with `x` and `y` properties containing the content offset.
- `contentSize` (Size): Dictionary with `width` and `height` properties containing the size of the content (regardless of the display size in the case of scrolling).
- `firstVisibleItem` (Number): Row index of the topmost visible row in the view.
- `size` (Size): Dictionary with `width` and `height` properties containing the size of the visible table view
- `totalItemCount` (Number): Total number of rows in the view.
- `visibleItemCount` (Number): Number of rows currently visible in the view.

### scrollend

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 3.0.0

Fired when the table view stops scrolling.

Event properties:

- `contentSize` (Size): Dictionary with `width` and `height` properties containing the size of the content (regardless of the display size in the case of scrolling).
- `contentOffset` (Point): Dictionary with `x` and `y` properties containing the content offset.
- `size` (Size): Dictionary with `width` and `height` properties containing the size of the visible table view.
- `x` (Number): X coordinate of the event from the `source` view's coordinate system.
- `y` (Number): Y coordinate of the event from the `source` view's coordinate system.

### singletap

- Platforms: Android, iPhone, iPad, macOS

Fired when the device detects a single tap against the view.

Event properties:

- `index` (Number): Row index.
- `row` (Titanium.UI.TableViewRow): Table view row object.
- `rowData` (Dictionary<Titanium.UI.TableViewRow>): Properties of the row. When the row is created implicitly using a JavaScript dictionary object, use this property rather than `row` to access any custom row properties. Here's an example of creating a row implicitly, which is not the recommended way. var data = [{title:'Row 1', hasChild:true, color:'red', selectedColor:'#fff', special:'special 1'},]; var table = Ti.UI.createTableView({data: data});
- `x` (Number): X coordinate of the event from the `source` view's coordinate system.
- `y` (Number): Y coordinate of the event from the `source` view's coordinate system.

### swipe

- Platforms: Android, iPhone, iPad, macOS
- Since: Titanium SDK 2.1.0

Fired when the device detects a swipe gesture (left or right) against the view.

Event properties:

- `direction` (String): Direction of the swipe, either `left`, `right` or `unknown`.
- `index` (Number): Row index.
- `row` (Titanium.UI.TableViewRow): Table view row object.
- `rowData` (Dictionary<Titanium.UI.TableViewRow>): Properties of the row. When the row is created implicitly using a JavaScript dictionary object, use this property rather than `row` to access any custom row properties. Here's an example of creating a row implicitly, which is not the recommended way. ``` js var data = [{title:'Row 1', hasChild:true, color:'red', selectedColor:'#fff', special:'special 1'},]; var table = Ti.UI.createTableView({data: data}); ```
- `x` (Number): X coordinate of the event's endpoint from the `source` view's coordinate system.
- `y` (Number): Y coordinate of the event's endpoint from the `source` view's coordinate system.

### touchcancel

- Platforms: iPhone, iPad, macOS

Fired when a touch gesture is interrupted by the device.

Generated in various circumstances, including an incoming call to allow the UI to clean
up state.

On Android and iOS, be aware that a row or table touch event and a table
[scroll](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#scroll) event cannot occur concurrently. If a table begins
to scroll during a touch event, the appropriate row or table `touchcancel` event fire
before the `scroll` event begins.

Event properties:

- `x` (Number): X coordinate of the event from the `source` view's coordinate system.
- `y` (Number): Y coordinate of the event from the `source` view's coordinate system.
- `force` (Number): The current force value of the touch event. Note: This property only available for iOS devices that support 3D-Touch and run 9.0 or later.
- `maximumPossibleForce` (Number): Maximum possible value of the force property. Note: This property is only available for iOS devices that support 3D-Touch and run 9.0 or later.
- `altitudeAngle` (Number): A value which indicates the stylus angle on the screen. If the stylus is perpendicular to the screen or no stylus is being used, the value will be Pi/2. If the stylus is parallel to the screen, the value will be 0. Note: This property is only available for iOS devices that support 3D-Touch and are 9.1 or later.
- `timestamp` (Number): The time (in seconds) when the touch was used in correlation with the system start up. Note: This property is only available for iOS devices that support 3D-Touch and run 9.0 or later.

### touchend

- Platforms: Android, iPhone, iPad, macOS

Fired when a touch gesture is complete.

On Android and iOS, be aware that a row or table touch event and a table
[scroll](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#scroll) event cannot occur concurrently. If a table begins
to scroll during a touch event, the appropriate row or table `touchcancel` event fire
before the `scroll` event begins.

Event properties:

- `index` (Number): Row index.
- `row` (Titanium.UI.TableViewRow): Table view row object.
- `rowData` (Dictionary<Titanium.UI.TableViewRow>): Properties of the row. When the row is created implicitly using a JavaScript dictionary object, use this property rather than `row` to access any custom row properties. Here's an example of creating a row implicitly, which is not the recommended way. ``` js var data = [{title:'Row 1', hasChild:true, color:'red', selectedColor:'#fff', special:'special 1'},]; var table = Ti.UI.createTableView({data: data}); ```
- `x` (Number): X coordinate of the event from the `source` view's coordinate system.
- `y` (Number): Y coordinate of the event from the `source` view's coordinate system.
- `force` (Number): The current force value of the touch event. Note: This property only available for iOS devices that support 3D-Touch and run 9.0 or later.
- `maximumPossibleForce` (Number): Maximum possible value of the force property. Note: This property is only available for iOS devices that support 3D-Touch and run 9.0 or later.
- `altitudeAngle` (Number): A value which indicates the stylus angle on the screen. If the stylus is perpendicular to the screen or no stylus is being used, the value will be Pi/2. If the stylus is parallel to the screen, the value will be 0. Note: This property is only available for iOS devices that support 3D-Touch and are 9.1 or later.
- `timestamp` (Number): The time (in seconds) when the touch was used in correlation with the system start up. Note: This property is only available for iOS devices that support 3D-Touch and run 9.0 or later.

### touchstart

- Platforms: Android, iPhone, iPad, macOS

Fired as soon as the device detects a touch gesture against this view.

On Android and iOS, be aware that a row or table touch event and a table
[scroll](https://titaniumsdk.com/docs/sdk/Titanium.UI.TableView.md#scroll) event cannot occur concurrently. If a table begins
to scroll during a touch event, the appropriate row or table `touchcancel` event fire
before the `scroll` event begins.

Event properties:

- `index` (Number): Row index.
- `row` (Titanium.UI.TableViewRow): Table view row object.
- `rowData` (Dictionary<Titanium.UI.TableViewRow>): Properties of the row. When the row is created implicitly using a JavaScript dictionary object, use this property rather than `row` to access any custom row properties. Here's an example of creating a row implicitly, which is not the recommended way. ``` js var data = [{title:'Row 1', hasChild:true, color:'red', selectedColor:'#fff', special:'special 1'},]; var table = Ti.UI.createTableView({data: data}); ```
- `x` (Number): X coordinate of the event from the `source` view's coordinate system.
- `y` (Number): Y coordinate of the event from the `source` view's coordinate system.
- `force` (Number): The current force value of the touch event. Note: This property only available for iOS devices that support 3D-Touch and run 9.0 or later.
- `maximumPossibleForce` (Number): Maximum possible value of the force property. Note: This property is only available for iOS devices that support 3D-Touch and run 9.0 or later.
- `altitudeAngle` (Number): A value which indicates the stylus angle on the screen. If the stylus is perpendicular to the screen or no stylus is being used, the value will be Pi/2. If the stylus is parallel to the screen, the value will be 0. Note: This property is only available for iOS devices that support 3D-Touch and are 9.1 or later.
- `timestamp` (Number): The time (in seconds) when the touch was used in correlation with the system start up. Note: This property is only available for iOS devices that support 3D-Touch and run 9.0 or later.

### twofingertap

- Platforms: iPhone, iPad, macOS

Fired when the device detects a two-finger tap against the view.

Event properties:

- `x` (Number): X coordinate of the event from the `source` view's coordinate system.
- `y` (Number): Y coordinate of the event from the `source` view's coordinate system.

## Inherited members

86 members are inherited. Each is documented on the type that declares it.

- [Titanium.Proxy](https://titaniumsdk.com/docs/sdk/13.0.1/Titanium.Proxy.md): `addEventListener`, `apiName`, `applyProperties`, `bubbleParent`, `fireEvent`, `lifecycleContainer`, `removeEventListener`
- [Titanium.UI.View](https://titaniumsdk.com/docs/sdk/13.0.1/Titanium.UI.View.md): `accessibilityDisableLongPress`, `accessibilityHidden`, `accessibilityHint`, `accessibilityLabel`, `accessibilityValue`, `anchorPoint`, `animate`, `animatedCenter`, `backgroundDisabledColor`, `backgroundDisabledImage`, `backgroundFocusedColor`, `backgroundFocusedImage`, `backgroundGradient`, `backgroundImage`, `backgroundLeftCap`, `backgroundRepeat`, `backgroundTopCap`, `borderColor`, `borderRadius`, `borderWidth`, `bottom`, `center`, `clearMotionEffects`, `clipMode`, `convertPointToView`, `dblclick`, `elevation`, `filterTouchesWhenObscured`, `focusable`, `getViewById`, `height`, `hiddenBehavior`, `hide`, `horizontalMotionEffect`, `horizontalWrap`, `id`, `insertAt`, `keepScreenOn`, `keypressed`, `layout`, `left`, `longclick`, `opacity`, `overrideCurrentAnimation`, `pinch`, `postlayout`, `previewContext`, `pullBackgroundColor`, `rect`, `right`, `rotate`, `rotation`, `rotationX`, `rotationY`, `scaleX`, `scaleY`, `show`, `size`, `softKeyboardOnFocus`, `stopAnimation`, `tintColor`, `toImage`, `tooltip`, `top`, `touchEnabled`, `touchFeedbackColor`, `touchmove`, `transform`, `transitionName`, `translationX`, `translationY`, `translationZ`, `verticalMotionEffect`, `viewShadowColor`, `viewShadowOffset`, `viewShadowRadius`, `visible`, `width`, `zIndex`

---

- This corpus documents Titanium SDK 13.4.1. Anything here that does not name a version describes 13.4.1.
- Titanium is maintained by TiDev. The Appcelerator toolchain is retired: there is no `appc` CLI, no Appcelerator Studio and no hosted build service. The supported CLI is `titanium` on npm, invoked as `ti`.

