
UITextFieldは1行のテキスト入力ができるのですが、複数行のテキスト入力は
UITextViewが使えます。
まず、UITextViewにちょっと機能を加えたいので、MYTextViewというサブクラスを作る。
【MYTextViewの定義】
@interface MYTextView: UITextView{
}
@end
@implementation MYTextView
- (id)init{
self = [super init];
self.layer.borderColor = [UIColor blackColor].CGColor;
self.layer.borderWidth = 1;
UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
btn.frame = CGRectMake(0, 0, 320, 40);
[btn setTitle:@"終了" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(btnFinish:) forControlEvents:UIControlEventTouchUpInside];
self.inputAccessoryView = btn;
return self;
}
- (void)btnFinish:(id)btn{
[self resignFirstResponder];
}
@end
まず、
self.layer.borderColor = [UIColor blackColor].CGColor;
self.layer.borderWidth = 1;
この2行はビューのまわりに枠をつけます。
UITextViewは、UITextFieldみたいな枠をつける仕組みがないっぽいので、
ビューの機能で外枠をつけてあげます。
ビューについてるCALayerクラスにその機能があるのですが、このあたりはそのうち。
とりあえず、これで枠が付きます。
CALayerクラスは、QuartzCoreフレームワークに入っているので、
プロジェクトに組み込んでいなければ、組み込んでから、ソースのアタマに
#import <QuartzCore/QuartzCore.h>
を追加します。
つぎに、テキストを入力後、入力を終了させるためのボタンをキーボードの上に
配置します。
inputAccessoryViewにビューを設定すると、キーボードが表示されたときに、
キーボードの上にちょこんとのっかってくれます。
最後に、
- (void)btnFinish:(id)btn{
[self resignFirstResponder];
}
ボタンを押した時にキーボードを消す処理をいれます。
これで、クラスの作成はおしまいです。
あとは使うほうを組んで完成です

UIView* oya = [[UIView alloc]init];
oya.frame = CGRectMake(0, 0, 320, 480);
MYTextView* tx = [[MYTextView alloc]init];
tx.frame = CGRectMake(10, 50, 300, 100);
[oya addSubview:tx];
