
1行の文字入力はUITextFieldを使います。
UIViewのサブクラスなので、ビューと同じように組み込んで使います。
UIView* oya = [[UIView alloc]init];
oya.frame = CGRectMake(0, 0, 320, 480);
UITextField* field = [[UITextField alloc]init];
field.frame = CGRectMake(10, 50, 300, 30);
[oya addSubview:field];
これで組み込みできます。
で表示してみると。。。。
まっしろ。。(まっしろなので画像省略・・・)
で、上のほうを押すと、キーボードが表示される。
テキストフィールドはちゃんと表示されているのだけど、デフォルトだと透明なのでみえない。
field.borderStyle = UITextBorderStyleRoundedRect;
1行加えると、おなじみのテキスト入力ぽい感じになります。

できたー!!
と思ったけど、ひとつ難点が。。。
キーボードが、消えない。。。
なので、テキストフィールドにデリゲートを設定します。
デリゲートっていうのは、テキストフィールドに何かあったときに、
こんなことしてほしい!っていうことを定義できる仕組みのことです。
こんな感じのコードを書いておきます。
@interface MyTextFieldDelegate: NSObject{
}
@end
@implementation MyTextFieldDelegate
- (id)init{
self = [super init];
return self;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return TRUE;
}
@end
MyTextFieldDelegateというクラスを定義します。
このクラス自体は、超基本のNSObjectクラスのサブクラスですが、
NSObjectのあとに
これを書くことで、UITextFieldのデリゲートになれます。
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return TRUE;
}
このメソッド定義が今回のキモです。
このメソッドはデリゲート処理のなかで、Returnを押されたらこんなことしてほしい!
ってことを書いておきます。
resignFirstResponderを呼ぶとキーボードを消すことができるので、
これで、Returnを押したらキーボードを消す!が実現できます。
その上で、コードをこう書き換えます。
UIView* oya = [[UIView alloc]init];
oya.frame = CGRectMake(0, 0, 320, 480);
UITextField* field = [[UITextField alloc]init];
field.frame = CGRectMake(10, 50, 300, 30);
field.borderStyle = UITextBorderStyleRoundedRect;
MyTextFieldDelegate* d = [[MyTextFieldDelegate alloc]init];
field.delegate = d;
[oya addSubview:field];
これで完成!です

やったね
