My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
TableView  
UIカタログ - TableView (基本編)
api, ui, view, tableview
Updated Dec 2, 2010 by donadona

UIカタログ - TableView (基本編)

TableViewは単純な行選択から複雑なレイアウト、グループ表示など多岐に渡る奥の深いものです。

ここではまず基本的な部分について見ていきます。

標準的なTable View

標準的なTableViewは次のような単純な行選択をするためのUIになります。

// Table Viewに表示するデータを作成しておきます
// hasChild, hasDetail, hasCheckプロパティがあると上の例のような表示になります。
var rows = [
    {title:'Row 1', hasChild:true},
    {title:'Row 2', hasDetail:true},
    {title:'Row 3', hasCheck:true},
    {title:'Row 4'}
];
// 先ほどのデータに基づいてTable Viewを起こします。
var tableview = Titanium.UI.createTableView({
    data: rows
});
// イベントリスナにクリック時のイベントを登録します。
tableview.addEventListener('click', function(e){
    var index     = e.index;
    var section  = e.section;
    var row       = e.row;
    var rowdata = e.rowData;
});
// Windowに追加する
Titanium.UI.currentWindow.add(tableview);

レイアウト

このように各行に対するレイアウトデザインすることも可能です。

// Navbarの色を変えつつ...
var win = Titanium.UI.currentWindow;
win.barColor = '#385292';

// 検索バーも配置しておきます
var searchBar = Titanium.UI.createSearchBar({
    barColor:'#385292', 
    showCancel:false
});

// 格納データとともに宣言
var tableView;
var rowData = [];

// ヘッダ部
var headerRow = Ti.UI.createTableViewRow();
headerRow.backgroundColor = '#576996';
headerRow.selectedBackgroundColor = '#385292';
headerRow.height = 40;
var clickLabel = Titanium.UI.createLabel({
	text:'Click different parts of the row',
	color:'#fff',
	textAlign:'center',
	font:{fontSize:14},
	width:'auto',
	height:'auto'
});
headerRow.className = 'header';
headerRow.add(clickLabel);
rowData.push(headerRow);

// レイアウト行
for (var c = 1; c < 50; c++){
    // datarowクラスとしてTableViewRowを作成
    var row = Ti.UI.createTableViewRow();
    row.selectedBackgroundColor = '#fff';
    row.height  =100;
    row.className = 'datarow';

    // 画像を配置する
    var photo = Ti.UI.createView({
        backgroundImage:'../images/custom_tableview/user.png',
        top:5,
        left:10,
        width:50,
        height:50
    });
    photo.rowNum = c;
    photo.addEventListener('click', function(e){
        // 上でセットしたrowNumにあたるe.source.rowNumでデータを特定する
    });
    row.add(photo);

    // ラベルを配置する
    var user = Ti.UI.createLabel({
        color:'#576996',
        font:{fontSize:16,fontWeight:'bold', fontFamily:'Arial'},
        left:70,
        top:2,
        height:30,
        width:200,
        text:'Fred Smith '+c
    });
    user.rowNum = c;
    user.addEventListener('click', function(e){
        // 上でセットしたrowNumにあたるe.source.rowNumでデータを特定する
    });
    row.add(user);
    // ラベル2個目
    var comment = Ti.UI.createLabel({
        color:'#222',
        font:{fontSize:16,fontWeight:'normal', fontFamily:'Arial'},
        left:70,
        top:21,
        height:50,
        width:200,
        text:'Got some fresh fruit, conducted some business, took a nap'
    });
    row.add(comment);
    // Viewも配置できる
    var calendar = Ti.UI.createView({
        backgroundImage:'../images/custom_tableview/eventsButton.png',
        bottom:2,
        left:70,
        width:32,
        height:32
    });
    calendar.rowNum = c;
    calendar.addEventListener('click', function(e){
        // 上でセットしたrowNumにあたるe.source.rowNumでデータを特定する
    });
    row.add(calendar);
    // ボタンを配置する
    var button = Ti.UI.createView({
		backgroundImage:'../images/custom_tableview/commentButton.png',
		top:35,
		right:5,
		width:36,
		height:34
    });
    button.rowNum = c;
    button.addEventListener('click', function(e){
        // 上でセットしたrowNumにあたるe.source.rowNumでデータを特定する
    });
    row.add(button);
    // ラベルは省略	
    var date = Ti.UI.createLabel({
        // (...)
        text:'posted on 3/11'
    });
    row.add(date);

    // 以上の内容の行を追加する
    rowData.push(row);
}

tableView = Titanium.UI.createTableView({
    data:    rowData,
    search: searchBar
});

設定

また「設定」画面のようなグループ表示もTableViewの一環としてサポートされていますので、作法もTableViewに則る必要があります。

グループ表示をするにはTableViewSectionとTableViewStyleの指定を用います。

// 外枠となるTable View Sectionを生成する。
var groupData = Ti.UI.createTableViewSection({
    headerTitle: 'Group 1'
});
// ここではダミーデータを追加する...
for (var x = 0; x < 10; x++){
    var row = Ti.UI.createTableViewRow({
        title: 'Group 1, Row ' + (x + 1)
    });
    // TableViewSectionにTableViewRowを追加する
    groupData.add(row);
}
// テーブルビューのstyleを指定する。
var tableview = Titanium.UI.createTableView({
    data: gruopData,
    style: Titanium.UI.iPhone.TableViewStyle.GROUPED
});

またコントロールの配置ももちろん出来ます。

// 格納する行データ配列を用意する
var rowData = [];

// 1つ目のスイッチとボタン
var row1 = Ti.UI.createTableViewRow({height:50});
var sw1  = Ti.UI.createSwitch({
    right:10,
    value:false
});
row1.add(sw1);

var button1 = Ti.UI.createButton({
    style:Titanium.UI.iPhone.SystemButton.DISCLOSURE,
    left:10
});
row1.add(button1);
row1.className = 'control';
rowData.push(row1);

// 2つ目は省略

// 先ほど同様にGROUPEDstyleを指定する
var tableView = Ti.UI.createTableView({
    data: rowData,
    style: Titanium.UI.iPhone.TableViewStyle.GROUPED,
    top:50
});

関連するKitchenSinkソース

関連するAPIドキュメント


原著作者表示:Appcelerator, Inc

Comment by mogyanl...@gmail.com, Dec 17, 2010

hasCheckを使ってチェックを付けたり外したりできるUIを作るには、イベントハンドラで

tableview.addEventListener('click', function(e){
  var row       = e.row;
  row.hasCheck = !(row.hasCheck);
});

ってすればいいらしい。

Comment by mogyanl...@gmail.com, Dec 18, 2010

設定ーグループ表示のサンプルコードのところ data: gruopData, → data: groupData,

Comment by jingleshow@gmail.com, Aug 16, 2011

createTableViewSectionコード部分を提示したところに、配列を漏れてしまったんでしょうか? sectionという要素は普段の配列に(複数でも可能)追加してから、TableViewのdata属性に割り当てるべきですね。 参考ページ: http://blog.asial.co.jp/780


Sign in to add a comment
Powered by Google Project Hosting