テーブル(3)

2010. 05. 04
●チュートリアル:セクションを使ったテーブル

iPhone SDKプログラミング大全』の『チュートリアル:セクションを使ったテーブル』について説明します。

241

前回のテーブルに配列を1つ加え、セクションヘッダを設定し、2つのセクションに拡張します。


●TableAppDelegate.hの編集

追加するセクション用に配列を1つ増やします。
(太字が追記した部分)

@interface TableAppDelegate : NSObject <UIApplicationDelegate, UITableViewDataSource> {
    NSArray *names;
    NSArray *petitNames;
    UIWindow *window;
}

242


●TableAppDelegate.mの編集

追加するセクション用に配列の初期化、セクション数、セクションヘッダの設定をします。
(太字が追記した部分)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch
    // namesを初期化
    names = [[NSArray arrayWithObjects:@"千早", @"やよい", @"貴音", nil] retain];

    // petitNamesを初期化
    petitNames = [[NSArray arrayWithObjects:@"ちひゃー", @"はるかさん", @"やよ", nil] retain];

    [window makeKeyAndVisible];
    return YES;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // セクションの数を返す
    // ここでは2つのセクションを表示
    return 2;
}


- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    // 第1セクションの場合
    if (section == 0) {
        // セクションのタイトルを『飼い主』にする
        return @"飼い主";
    }

    // 第2セクションの場合
    if (section == 1) {
        // セクションのタイトルを『ぷち』にする
        return @"ぷち";
    }

    return nil;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // 第1セクションの場合
    if (section == 0) {
        // namesの数を返す
        return [names count];
    }

    // 第2セクションの場合
    if (section == 1) {
        // petitNamesの数を返す
        return [petitNames count];
    }

    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // セルを作る
    UITableViewCell *cell;
    cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
        [cell autorelease];
    }

    // セルにテキストを設定
    // 第1セクションの場合
    if (indexPath.section == 0) {
        // namesから文字列を取得
        cell.textLabel.text = [names objectAtIndex:indexPath.row];
    }
    // 第2セクションの場合
    if (indexPath.section == 1) {
        // petitNamesから文字列を取得
        cell.textLabel.text = [petitNames objectAtIndex:indexPath.row];
    }
    return cell;
}

243


・numberOfSectionsInTableView:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

データソースにテーブルビューのセクション数を尋ね、返します
戻り値はtableViewのセクション数で、デフォルト値は1です

tableView:テーブルビューのオブジェクトを指定します


・tableView:titleForHeaderInSection:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

データソースに、指定したテーブルビューのセクションのヘッダタイトルを尋ね、返します

戻り値はセクションヘッダの戻り値になる文字列で、タイトルが無い場合はnilを返します

テーブルビューは、セクションヘッダタイトルに固定したフォントスタイルを使います
異なるフォントスタイルを使う場合は、デリゲートメソッドtableView:viewForHeaderInSection:の中で(UILabelオブジェクトなどの)カスタムビューを設定してください


●ビルドと実行

241

スクロールさせると、セクションヘッダの挙動が分かると思います。
(言葉では説明し難い表現なので、iPhone Simulatorなどで確認してください)

また、MainWindow.xib(本文のMainMenu.xibは間違い)でテーブルビューを選択し、Inspector WindowのAttributesでTable ViewのStyleを『Plain』から『Grouped』に変更すると、グループスタイルになります。

244

245

246

●NSIndexPathのUIKitへの拡張

前回触れるのを忘れていた、NSIndexPathの補足事項を説明します。

UITableViewオブジェクトの行とセクションを容易に識別するため、FoundationフレームワークのNSIndexPathクラスにはUIKitフレームワークのプログラミングインターフェイスを追加しています。

APIの構成は、クラスファクトリメソッドと2つのプロパティです。

indexPathForRow:inSection:メソッドは、セクションインデックス番号と行からNSIndexPathオブジェクトを生成します。

プロパティはそれらのオブジェクトから、行インデックス番号とセクションインデックス番号を返します。

・プロパティ

・行

テーブルビューのセクション内での行のインデックス番号を識別します(読み込み専用)

@property(readonly) NSUInteger row

・セクション

テーブルビュー内でのセクションのインデックス番号を識別します(読み込み専用)

@property(readonly) NSUInteger section



参考文献

UITableViewDataSource Protocol Reference

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

NSIndexPath UIKit Additions

自作アプリをApp Storeで世界に向けて販売できる!! iPhone SDKプログラミング大全 (MacPeople Books)自作アプリをApp Storeで世界に向けて販売できる!! iPhone SDKプログラミング大全 (MacPeople Books)
(2009/01/06)
木下 誠

商品詳細を見る






Lifestyle 650 home entertainment system
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
10 | 2017/11 | 12
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 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

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

Wish List
WACOM


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

Lifestyle 650 home entertainment system
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