このページは「iPhoneプログラミング入門」(工学社刊、ISBN 978-4-7775-1541-7)を読んで、もっと先へ進んでみたいと思った人への説明です。
次へ->
<-前へ
「次の一歩」一覧へ
「バーボタンアイテム」の利用2
BarButtonItemViewConttoller.hの編集
ラベルとアクションだけを宣言すればよい
ヘッダ・ファイル「BarButtonItemViewController.h」には、基本的には以下のものを設定すればいいだけです。
- ラベルを表すプロパティ、showLabel
- Addボタンをクリックしたときの動作を記述するアクション、addString
ただし、「showLabelの内容である文字列を受け取るshowString」というプロパティもあったほうがよいと思います。
大事なのは、「バーボタンアイテムのAddボタン」についての記述は要らないということです。あとで、インターフェイス・ビルダーで設定するからです。
編集部分
そこで、BarButtonItemViewController.hの重要な部分はリスト1のようになります。
リスト1 BarButtonItemViewController.h(主要な部分)
@interface BarButtonItemViewController : UIViewController {
UILabel *showLabel;
NSString *showString;
}
@property(nonatomic, retain) IBOutlet UILabel *showLabel;
@property(nonatomic, copy) NSString *showString;
-(IBAction)addString:(id)sender;
@end
BarButtonItemViewController.mの編集
viewDidLoadメソッドの編集
この(ビューコントローラの)ビューが最初に読み込まれたときに、ラベルshowLabelの内容は「Ge」という文字列であるように設定しておきます。
アクション(メソッド)addStringの実装
機能を考えるときは「アクション」と呼びますが、文法的には「メソッド」です。addStringメソッドでは、ラベルshowLabelの内容をshowStringに受け取り、それに文字列「Ge」を付加したものでshowLabelの内容を定義しなおすという処理をします。まあ、アホな処理です。
「文字列に文字列を付加する」には、本書で用いたinitWithFormatメソッドを使います。
本書では、「整数を文字列に変換する」という目的で、以下のような用い方をしました。
initWithFormat:@"%d", 整数
「%d」は「ここに、指定する整数の数字を入れる」という意味です。「ここ」とは、「@"」と「"」で挟まれた間です。たとえば整数の値が234なら、%dが234になりますから、@"234"という文字列になります。
今回は、以下のような用い方をします。
initWithFormat:@"%@Ge", ラベルの内容
「%@」は「ここに、指定する文字列をそのまんま入れる」という意味です。「ここ」とは、「@"」と「Ge"」で挟まれた間です。たとえばラベルの内容がGeGeGeなら、%@がGeGeGeになりますから、@"GeGeGeGe"という文字列になり、Geが1個増えることになります。
Cなど他のプログラミング言語でこの方法を知っている人は、文字列を表すのはObjective-Cでは%@で、%sではありませんから、注意しましょう。
編集部分
そこで、BarButtonItemViewController.mの重要な部分はリスト2のようになります。
リスト2 BarButtonItemViewController.m(主要な部分)
@implementation BarButtonItemViewController
@synthesize showLabel;
@synthesize showString;
.........
- (void)viewDidLoad {
showLabel.text=@"Ge";
[super viewDidLoad];
}
........
-(IBAction)addString:(id)sender{
showString=showLabel.text;
NSString *addedString=[[NSString alloc] initWithFormat:@"%@Ge", showString];
showLabel.text=addedString;
[addedString release];
}
- (void)dealloc {
[showLabel release];
[showString release];
[super dealloc];
}
@end
。