Nav(21)~Detail Edit(6)

2011. 01. 20
13)不要なTable view data sourceメソッド

tableView:canEditRowAtIndexPath:tableView:commitEditingStyle:forRowAtIndexPath:tableView:moveRowAtIndexPath:toIndexPath:tableView:canMoveRowAtIndexPath:の4つは今回使用しないので削除します。

14)tableView:didSelectRowAtIndexPath:の削除

デリゲートメソッドのtableView:didSelectRowAtIndexPath:は今回使用しないので削除します。

15)tableView:willSelectRowAtIndexPath:の実装

tableView:willSelectRowAtIndexPath:メソッドは行が選択される時に呼び出されるメソッドで、ここでは単純にnilを返し、行が選択状態になるのを回避しています。

これを行わないと、テキストフィールド以外の領域をタップした際にセルが選択状態になってしまうためです。

1088

16)textFieldDidBeginEditing:の実装

textFieldDidBeginEditing:は、テキストフィールドの編集が開始された時に呼び出されるメソッドで、選択されたテキストフィールドのポインタをtextFieldBeingEditedとして保持します。

17)textFieldDidEndEditing:の実装

textFieldDidEndEditing:は、テキストフィールドの編集が終了した時に呼び出されるメソッドで、一時可変配列tempValuesに値を保持します。

選択されたテキストフィールドのタグ(=行番号)を、initWithInt:でNSNumberのtadAsNumとします。

それをキーとして、textプロパティで取得したテキストフィールドの文字列をsetObject:forKey:でtempValuesに保存します。


textFieldDidBeginEditing:

- (void)textFieldDidBeginEditing:(UITextField *)textField

指定したテキストフィールドで編集が開始したことをデリゲートに伝えます。

このメソッドは、指定したテキストフィールドがファーストレスポンダになったことをデリゲートに伝えます。

このメソッドは、デリゲートの状態情報の更新に使用することができます。

例えばこのメソッドを使用して、編集中に表示する必要があるオーバーレイビューを表示することができます。

デリゲートによるこのメソッドの実装はオプションです。

textField:編集工程が開始したことを伝えるテキストフィールドを指定します。


textFieldDidEndEditing:

- (void)textFieldDidEndEditing:(UITextField *)textField

指定したテキストフィールドで編集が停止したことをデリゲートに伝えます。

このメソッドは、テキストフィールドがファーストレスポンダ状態を放棄した後で呼び出されます。

このメソッドは、デリゲートの状態情報の更新に使用することができます。

例えばこのメソッドを使用して、編集中のみ表示する必要があるオーバーレイビューを非表示にすることができます。

デリゲートによるこのメソッドの実装はオプションです。

textField:編集工程が終了したことを伝えるテキストフィールドを指定します。

18)viewDidUnloadの実装

本書やサンプルコードではviewDidUnloadは記述されていませんが、4つのプロパティの所有権放棄を行います。

19)deallocの実装

deallocでは本書やサンプルコードと同じく、4つのプロパティの解放を行っています。


●ルートビューコントローラFirstLevelViewController.mの編集

ルートビューのテーブルにサブビューDetail Editの項目を追加します。
(太字が追加した部分)

#import "FirstLevelViewController.h"
#import "SecondLevelViewController.h"
#import "DisclosureButtonController.h"
#import "CheckListController.h"
#import "RowControlsController.h"
#import "MoveMeController.h"
#import "DeleteMeController.h"
#import "PresidentsViewController.h"

@implementation FirstLevelViewController

@synthesize controllers;

#pragma mark -
#pragma mark Initialization

- (id)initWithStyle:(UITableViewStyle)style {
    // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization.
    }
    return self;
}

#pragma mark -
#pragma mark View lifecycle

- (void)viewDidLoad {
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;

    self.title = @"First Level";
    NSMutableArray *array = [[NSMutableArray alloc] init];

    // Disclosure Button
    DisclosureButtonController *disclosureButtonController = [[DisclosureButtonController alloc] initWithStyle:UITableViewStylePlain];
    disclosureButtonController.title = @"Disclosure Buttons";
    disclosureButtonController.rowImage = [UIImage imageNamed:@"disclosureButtonControllerIcon.png"];
    [array addObject:disclosureButtonController];
    [disclosureButtonController release];

    // Check List
    CheckListController *checkListController = [[CheckListController alloc] initWithStyle:UITableViewStylePlain];
    checkListController.title = @"Check One";
    checkListController.rowImage = [UIImage imageNamed:@"checkmarkControllerIcon.png"];
    [array addObject:checkListController];
    [checkListController release];

    // Table Row Controls
    RowControlsController *rowControlsController = [[RowControlsController alloc] initWithStyle:UITableViewStylePlain];
    rowControlsController.title = @"Row Controls";
    rowControlsController.rowImage = [UIImage imageNamed:@"rowControlsIcon.png"];
    [array addObject:rowControlsController];
    [rowControlsController release];

    // Move Me
    MoveMeController *moveMeController = [[MoveMeController alloc] initWithStyle:UITableViewStylePlain];
    moveMeController.title = @"Move Me";
    moveMeController.rowImage = [UIImage imageNamed:@"moveMeIcon.png"];
    [array addObject:moveMeController];
    [moveMeController release];

    // Delete Me
    DeleteMeController *deleteMeController = [[DeleteMeController alloc] initWithStyle:UITableViewStylePlain];
    deleteMeController.title = @"Delete Me";
    deleteMeController.rowImage = [UIImage imageNamed:@"deleteMeIcon.png"];
    [array addObject:deleteMeController];
    [deleteMeController release];

    // President View/Edit
    PresidentsViewController *presidentsViewController = [[PresidentsViewController alloc] initWithStyle:UITableViewStylePlain];
    presidentsViewController.title = @"Detail Edit";
    presidentsViewController.rowImage = [UIImage imageNamed:@"detailEditIcon.png"];
    [array addObject:presidentsViewController];
    [presidentsViewController release];


    self.controllers = array;
    [array release];
}

(後略)

1081

内容はDelete Meのものと同じです。

まずサブビューのヘッダファイルPresidentsViewController.hをインポートします。

そしてviewDidLoadメソッドで、Delete Meの設定の下に以下の内容を追加します。

PresidentsViewControllerのインスタンスを(スーパークラスであるUITableViewControllerクラスの)initWithStyle:メソッドを使用しプレーンスタイル(UITableViewStylePlain)で生成・初期化します。

このインスタンスはaddObject:で可変配列arrayに、そして配列プロパティcontrollersに格納され、tableView:didSelectRowAtIndexPath:でナビゲーションコントローラにプッシュされます。

titleプロパティに設定した文字列、rowImageプロパティで設定した画像ファイルは、tableView:cellForRowAtIndexPath:でセルの表示に使用されます。


●実行

この段階で『ビルドと実行』を行うと、ルートビューのテーブルにDetail Editのセルが追加されます。

1091

行を選択するとサブビューに移行します。

1092

サブビューの項目(大統領名)を選択すると、その詳細ビュー(任期期間と所属政党)が表示されます。

1089

各項目はテキストフィールドになっていて編集することができ、編集後にナビゲーションバー右側のSaveボタンをタップすると保存されて、サブビューに戻ります。

ナビゲーションバー左側のCancelボタンをタップすると、編集した内容は破棄されてサブビューに戻ります。

1090

テキストフィールド編集時に出るキーボード右下はDoneボタンになっていて、タップすると編集が確定され、キーボードが片付けられます。
(この時点で編集内容は保存されません。保存するにはSaveボタンをタップする必要があります)



参考文献

UITextFieldDelegate Protocol Reference

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

商品詳細を見る






bose_soundlink_revolve
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
03 | 2017/04 | 05
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

bose_soundlink_revolve
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