備忘録

現在ある用途のTimerを作っているのだが、相変わらずUI周りでつまずくことが多い。
iOSは素晴らしいUI ToolKitを提供してくれるのだが、それらを実装するには、やはりそこそこ勉強がいる訳である。
以下はとりあえず纏める前のメモ

ModalViewにプロパティを引き渡す際には手抜きしない

TableViewControllerでDetailViewControllerを開く際に、プロパティを引き渡すのに、直接IBOultletなどに書き込まない。
例えば、


@interface ChildViewController : UIViewController
{
IBOutlet UITextfield* textfiledTimerName;
IBOutlet UILabel* labelDuration; // for prototype
IBOutlet UIPickerView* pickerDuration;
int intTimer;
int intTimerIndex;
NSString* stringTimerName;
}
@property ( assign, nonatomic ) int intTimer;
@property ( assign, nonatomic ) int intTimerIndex;
@property ( retain, nonatomic) NSString* stringTimerName;
などとプロパティを作成し、これらに引き渡す。
表示に反映させるためには、

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
//
textfieldTimerName.text = stringTimerName;
labelDuration.text = [ NSString stringWithFormat: @"%d:%.2d", intTimer / 60, intTimer % 60 ];
}
などと使用すればよろしい。

viewDidLoad or viewDidAppear?

初期設定や、初期画面表示などviewDidLoadに全て実装しがちだが、きちっと分けて実装する。
viewDidLoadはViewControllerがロードされる初回のみ、viewDidAppearはViewControllerがForegroundに表示されるたびに呼び出される。
つまりModalViewを呼び出して、それが閉じた後でもviewDidAppearは呼び出される。
同TabBarViewControllerである。

じゃあviewWillAppear or viewDidAppear?

viewWillAppearに実装するとForegroundに表示される前に反映される。
viewDidAppearに実装すればForegroundに表示された後に反映される、つまり変更されるのが目に見えるのだ。

ViewControllerにNavigation Barや"Back"などのボタンを表示する方法

単純にIBで貼ればよろし、ボタンは"Bar Button Item"、メソッドはボタンにリンクすればよろしい。

PickerViewの実装

PickerViewを実装するためには、IBでViewControllerに貼付けた後に、UIPickerViewDataSource, UIPickerViewDelegateの二つのプロトコルをViewControllerに追加する、上記参照。
あとは必要なメソッドやプロパティを実装すればよい。
大切なものは、以下の通り。

  • - (NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView、PickerViewの列の数を指定
  • - (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component、各列の行数を指定
  • - (NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger) component、各列、各行の表示内容を指定
  • - (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component、各列が操作されて止まったときに呼ばれる
  • [ PickerView selectRow: (NSInteger) inComponent: (NSInteger) animated: (BOOL) ];、各列の初期値を設定