Simple Table(3)~デリゲートによる処理

2010. 11. 01
続いて、UITableViewDelegateプロトコルのメソッドを利用した処理をいくつか試してみます。


●インデント(字下げ)の設定

テーブルセルを表示する際に、階層構造を明示する時などで字下げを行う方法です。

888

今回は行番号に応じてインデントレベルが上がる処理になっています。

データソースメソッドの記述の下に以下のメソッドを追加します。

#pragma mark -
#pragma mark Table Delegate Methods

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSUInteger row = [indexPath row];
    return row;
}

889

tableView:indentationLevelForRowAtIndexPath:メソッドでセルにインデントを施しますが、インデントレベルはインデックスパスの行番号を返しています。

したがって、行番号0の最初の行はレベル0(インデント無し)、次の行の行番号1はレベル1となります。

レベルが1増えるに従って、実測で10ピクセル字下げされます。


tableView:indentationLevelForRowAtIndexPath:

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath

指定したセクション内の行のインデントレベルをデリゲートに尋ねます。

戻り値は、セクション内の階層の位置を表示するための、指定した行の深さになります。

tableView:この情報を要求するテーブルビューオブジェクトを指定します。

indexPath:tableView内の行の位置を示すインデックスパスを指定します。


●行選択の処理

行選択時の処理には、指でタッチした際にその行選択を有効/無効に判別したりする直前の処理(tableView:willSelectRowAtIndexPath:)と、実際に選択された後の処理(tableView:didSelectRowAtIndexPath:)の2種類があります。

ここでは事前処理として1行目(行番号0)を選択不可にし、事後処理として1行目を除く行が選択された時にアラートで選択行のタイトルを表示します。

tableView:indentationLevelForRowAtIndexPath:メソッドの下に以下の両メソッドを追加します。

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSUInteger row = [indexPath row];
    if (row == 0)
        return nil;
    return indexPath;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSUInteger row = [indexPath row];
    NSString *rowValue = [listData objectAtIndex:row];
    NSString *message = [[NSString alloc] initWithFormat:@"You Selected %@", rowValue];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Row Selected!" message:message delegate:nil cancelButtonTitle:@"Yes, I Did" otherButtonTitles:nil];
    [alert show];
    [message release];
    [alert release];
}

890

tableView:willSelectRowAtIndexPath:メソッドは行がタップされた時に呼び出され、実際に選択されたと処理されるのはこれ以後という流れになります。

したがって、タップに対して強調表示になる応答は発生します。

タップされた行はインデックスパスからrowプロパティで抽出し、1行目の場合はnilを返して選択されなかったという扱いにします。
(それ以外の場合はそのままインデックスパスを返します)

tableView:didSelectRowAtIndexPath:メソッドは実際に行が選択された後で呼び出され、rowプロパティで抽出した行番号からobjectAtIndex:でlistData配列の要素を取り出し、アラートで表示しています。

891


tableView:willSelectRowAtIndexPath:

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

指定した行が選択されたことをデリゲートに伝えます。

戻り値は、確認または変更される選択された行のインデックスパスオブジェクトです。

indexPath以外の他のセルが選択された場合は、NSIndexPathオブジェクトを返します。

行が選択されなかった場合はnilを返します。

このメソッドは、ユーザが行をタッチして指を離すまでは、タッチダウンとして強調表示にはなりますが、まだ呼び出されません。

タッチダウンの際にセルの外観が強調表示されるのを無効にしたい場合は、UITableViewCellSelectionStyleNoneを使用することができます。

このメソッドは、テーブルのeditingプロパティがYESに設定されている(テーブルビューが編集モードになっている)場合は呼び出されません。

tableView:選択されることについての情報をデリゲートに通知するテーブルビューを指定します。

indexPath:tableView内の行の位置を示すインデックスパスを指定します。


row

@property(readonly) NSUInteger row

テーブルビューのセクション内にある行を識別するインデックス番号です。
(読み込みのみ)

行の入っているセクションは、sectionの値によって識別できます。



参考文献

UITableViewDelegate Protocol Reference

NSIndexPath UIKit Additions Reference

はじめてのiPhone3プログラミングはじめてのiPhone3プログラミング
(2009/12/17)
Dave Mark、Jeff LaMarche 他

商品詳細を見る






bose_soundsport_free
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
09 | 2017/10 | 11
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

bose_soundsport_free
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