2011年6月30日木曜日

テーブルのセルの高さを変える。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
// Return height the height of cell(Row)
return 35.0;
}

テーブルのセクションタイトルの文字色を変更する。

テーブル(UITableView)のセクションタイトルは、以下の記述ではデフォルトの文字色から変更することはできません。


-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
if (section == 0) {
return @"E-mail";
}
else if (section == 2){
return @"Sound";
}
else {
return @"Value Added Tax (VAT)";
}
}

そこで以下の記述とすると、セクションタイトルにビューを返すことができ、背景を黒とし、文字の色を白くすることができます。

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
if (section == 0) {
UIView *v = [[UIView alloc] init];
v.backgroundColor = [UIColor blackColor];
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 30.0f)];
UIImage *bgImage = [UIImage imageNamed:@"topTableSectionTitleBack.png"];
lbl.backgroundColor = [UIColor colorWithPatternImage: bgImage];
lbl.textColor = [UIColor whiteColor];
lbl.text = @" E-mail";
[v addSubview:lbl];
[lbl release];
return v;
}
else if (section == 2){
UIView *v = [[UIView alloc] init];
v.backgroundColor = [UIColor blackColor];
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 30.0f)];
UIImage *bgImage = [UIImage imageNamed:@"topTableSectionTitleBack.png"];
lbl.backgroundColor = [UIColor colorWithPatternImage: bgImage];
lbl.textColor = [UIColor whiteColor];
lbl.text = @" Sound";
[v addSubview:lbl];
[lbl release];
return v;
}
else {
UIView *v = [[UIView alloc] init];
v.backgroundColor = [UIColor blackColor];
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 30.0f)];
UIImage *bgImage = [UIImage imageNamed:@"topTableSectionTitleBack.png"];
lbl.backgroundColor = [UIColor colorWithPatternImage: bgImage];
lbl.textColor = [UIColor whiteColor];
lbl.text = @" Value Added Tax (VAT)";
[v addSubview:lbl];
[lbl release];
return v;
}
}

しかしながら、このままではセクションのテーブルがタイトル文字と被ってしまいます。そこでテーブルのプロパティにあるHedderのサイズを30とするならば、かぶりを解消することができます。気づくのに結構な時間を費やしてしまった。

2011年6月26日日曜日

UIViewControllerを分割する

UIが複雑になってくるとUIViewControllerが非常に巨大になってきて困っている方も多いのではないでしょうか。
そのような場合には以下の方法があります。
・再利用可能なUIView部品を作成し、コントロールの一部を組み込む。
・UIViewControllerをオブジェクト分割する

再利用可能なUIView部品の作成方法については下記にあるため参考とされたい。ここでのContrntViewは恐らくIBOutletで本体のViewに接続されてたものと思われます。
http://www.awaresoft.jp/development/35-iphone-app/93-create-reusable-ui-with-interface-builder.html

ここでは、後者、すなわち、Nibファイルは一個のままでUIViewControllerを分割する方法を記録します。

−−−*.h−−−−

まず分割したいオブジェクトのヘッダファイルを記述します。

#import
@interface decimalMode : NSObject {
NSString *now;
UIButton *zeroButton, *add2Button , *twoButton, *FButton;

}
@property (nonatomic, retain) NSString *now;
@property (nonatomic, retain) IBOutlet UIButton *zeroButton, *add2Button , *twoButton, *FButton;
-(void) zero ;
-(void) add2 ;
-(void) two ;
-(void) flowting ;
@end

オブジェクト分割時の基本は、オブジェクトの操作をメソッド化(ここではzero- flowting)し、状態の読み取りをプロパティ化することにあります。
そして、操作するUIをアウトレットか化します(ここでは、zeroButton-FButton)。


−−−*.m−−−−


つぎに、実行ファイル(*.m)を記載しますが、ここでの注意点はNibが起動した際に、このオブジェクトを包含して起動してもらうことです。そのために以下のコードを付加します。


-(void) awakeFromNib {
    [super awakeFromNib];
}

あとは普通にzeroからflowtingまでの処理(ここではUIButtonの色操作)を実装します。


−−−*.xib−−−−

次にNibファイルにLibraryからオブジェクトを導入します。
この際、Command+F4でオブジェクトを追加したオブジェクトに変更します。
そうするとIBOutletで指定した足がCommand+F2とかで見ることができると思います。
この足を、マウス右クリック等で、該当するUI部品(この場合はボタン)と連接します。
ーーー*.UIViewController.hーーー

さらにUIViewContrller.hに、当該オブジェクトのヘッダファイルをインポートし、
さらに当該オブジェクトをアウトレット指定します。


#import "decimalMode.h"
@interface makidenViewController : UIViewController{
      ....


decimalMode *DecimalMode;
}

....
@property (nonatomic, retain) IBOutlet decimalMode *DecimalMode;

@end



さらに、InterfaceBuilderに戻り、File's OWnerから実装したオブジェクト(ここではDecimalMode)
に向けて、マウス右クリックしながらのドラックなどで、このアウトレットをオブジェクトとリンクします


ーーー*.UIViewController.m ーーー

お決まりの@synthesizeや=nil, [... release]を実装さえすれば、
オブジェクトが自動でロードされるため、初期化処理なしでいきなり当該オブジェクトを呼び出すことができます。

[DecimalMode zero];


以上です。やったね。