テーブル(1)

2010. 04. 25
iPhone SDKプログラミング大全』では、Hello Worldを表示するサンプルコードの作成の順番なのですが、Macが入院中なのでその次のテーブルの話をします。


●UITableView、UITableViewCellクラスの継承階層

UITableViewの継承階層は次のようになっています。
(UIKit全体図は『UIKitの概要』を参照してください)

NSObject
    ∟UIResponder
            ∟UIView
                    ∟UITableViewCell
                    ∟UIScrollView
                            ∟UITableView


●UITableViewの概要

UITableViewのインスタンス(または単にテーブルビューと呼ぶ)は、情報を階層化したリストの表示と編集を行います。

UIKitフレームワークのテーブルビューは、デバイスの小さな画面に対応するために表示が一列に制限されています。

UITableViewはUIScrollViewのサブクラスなのでテーブルをスクロールすることができますが、UITableViewでは垂直方向のスクロールしかできません。

テーブルはUITableViewCellオブジェクトのセルによって構成されており、UITableViewはこれらのオブジェクトを使用してテーブルの行を描画します。

セルはタイトルとイメージを持つことができ、また右端付近にアクセサリビューを表示できます。

標準アクセサリビューには、ディスクロージャインジケータ(次のレベルのデータ階層に進む表示)や詳細ディスクロージャボタン(選択したアイテムの詳細を表示するボタン)があります。

アクセサリビューは、スイッチやスライダなどの制御系フレームワークやカスタマイズしたビューを使用できます。

テーブルビューには編集モードが有り、ユーザがテーブルの行の挿入、削除、並べ替えなどが行えます。

テーブルビューは0個以上のセクションを持ち、それぞれ独自の行を持ちます。

セクションはテーブルビュー内でインデックス番号で識別され、行はセクション内でインデックス番号で識別されます。

セクションは、先頭にセクションヘッダを最後にセクションフッタを任意に設定できます。

テーブルビューにはUITableViewStylePlainとUITableViewStyleGroupedの2つのスタイルが有ります。

UITableViewのインスタンスを生成する際にはスタイルを指定する必要が有り、またスタイルは変更することができません。

233

プレーンスタイルでは、セクションヘッダとフッタを、全てのセクションより上に浮いた形で表示できます。

テーブルビューは右側に(例えば『a』~『z』などの)インデックスバーを表示させることができ、特定のラベルをタッチすると目的のセクションにジャンプできます。

234

テーブルビューのグループスタイルは、全てのセルに対しデフォルトで背景色と背景ビューを提供します。

背景ビューは、セクション毎に全てのセルを視覚的にグループ化して提供します。
(例えば、あるグループは個人名とタイトル、別のグループには電話番号、別のグループにはメールアカウントなど)

グループテーブルの例についてはアプリケーションの設定を参照してください。

グループスタイルのテーブルビューはインデックスを持つことはできません。

UITableViewの多くのメソッドは、NSIndexPathのオブジェクトをパラメータや戻り値として持っています。

UITableViewは、NSIndexPathで表現された行インデックス(rowプロパティ)とセクションインデックス(セクションプロパティ)、そして指定した行インデックスとセクションインデックス(indexPathForRow:inSection:メソッド)から組み立てたインデックスパスを宣言します。

特に複数のセクションを持つテーブルビューでは、行のインデックス番号を確認する前に、セクションインデックスの数を求める必要があります。

UITableViewオブジェクトは、データソースとなるオブジェクトとデリゲートとなるオブジェクトを持つ必要があります。
(通常はアプリケーションデリゲート、もしくはカスタマイズされたUITableViewControllerオブジェクトです)

データソースは、UITableViewDataSourceプロトコルと、UITableViewDelegateプロトコルのデリゲートを採用している必要があります。

データソースは、テーブルの行を挿入、削除、並べ替えなどのデータモデルを管理し、UITableViewがテーブルを構築するのに必要な情報を提供します。

デリゲートは、テーブルで使用されるセルの提供と、他のタスク(アクセサリビューとセレクションの管理など)を提供します。

(第1引数がYESの)setEditing:animated:メッセージが送られるとテーブルビューは編集モードになり、編集または並べ替えという操作に応じたUITableViewCellのeditingStyleで行を表示します。

挿入や削除を選択すると、データソースはtableView:commitEditingStyle:forRowAtIndexPath:メッセージを受信します。

削除の場合はdeleteRowsAtIndexPaths:withRowAnimation:を、挿入の場合はinsertRowsAtIndexPaths:withRowAnimation:で委託します。

また編集モードで、テーブルビューのセルがshowsReorderControlプロパティがYESの場合、データソースはtableView:moveRowAtIndexPath:toIndexPath:メッセージを受信します。

データソースは、tableView:canMoveRowAtIndexPath:でセルの削除や並べ替えを行うことができます。

UITableViewのキャッシュはテーブルビューセルの表示されている行のみですが、テーブル全体の行とヘッダ、フッタもキャッシュされています。

デフォルトセルと異なる行動特性を持った、カスタムUITableViewCellオブジェクトを作ることもできます。
iOS Table Viewプログラミングガイドの『Table View Cellの詳細』を参照してください)

UITableViewは、UITableViewの新しいインスタンスを生成する、または新しいデータソースを割り当てる場合のみreloadDataを呼び出し、UIViewのlayoutSubviewsメソッドをオーバーライドします。

テーブルビューをリロードすると、現在の選択を含む状態をクリアします。

しかし明示的にreloadDataを呼び出した場合は、状態のクリアとその後の直接または間接的なlayoutSubviewsの呼び出しによるリロードは行われません。


●テーブルビュースタイル

テーブルビューのスタイルはプレーンとグループの2種類有り、UITableView.hで定義されています。

テーブルスタイルを設定する際には、テーブルビューを初期化してください。
(initWithFrame:style:参照)

スタイルは後で変更ができません。

typedef enum {
    UITableViewStylePlain,
    UITableViewStyleGrouped
} UITableViewStyle;

・UITableViewStylePlain

簡素なテーブルビュー。
全てのセクションのヘッダまたはフッタはインラインセパレータで表示され、テーブルビューがスクロールする際には浮いた表現になります。

・UITableViewStyleGrouped

セクション毎に別個の行のグループとなるテーブルビューです。
セクションのヘッダとフッタは浮いていなく、行と一緒にスクロールします。


●セクションインデックスアイコン

テーブルビューにセクションインデックスのアイコンを表示させます。

UIKIT_EXTERN NSString *const UITableViewIndexSearch;

UITableIndexSearch:sectionIndexTitlesForTableView:で返される文字列の配列の中に、この文字定数が含まれていた場合、セクションインデックスは拡大鏡のアイコンと一致するインデックスの位置を表示します。

この位置は、一般的にインデックスの最初のタイトルの場所になります。



参考文献

UITableView Class Reference

UITableViewDataSource Protocol Reference

UITableViewCell Class Reference

iOS Table Viewプログラミングガイド

福井高専IT研究会OfficialWiki/UITableView

iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)iPhone SDK 3 プログラミング大全 実践プログラミング (MacPeople Books)
(2009/09/08)
木下 誠

商品詳細を見る






SoundSport Pulse wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
04 | 2017/05 | 06
Sun Mon Tue Wed Thu Fri Sat
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

SoundSport Pulse wireless headphones
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR