UITextFieldの左側にundoボタンを追加する例です。
leftViewModeをUITextFieldViewModeWhileEditingとしたのでは表示されなかったので、becomeFirstResponder、resignFirstResponderをオーバライドし、表示/非表示を切り替えています。
//UITextFieldのサブクラスを作る。
@implementation MyTextFieldWithLeftView
//Storyboardで設定する場合の初期化
//leftViewにUIButtonをセット。
//初期状態は非表示。
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(6,0,30,30);
[btn setImage:[UIImage imageNamed:@"undo"]
forState:UIControlStateNormal];
self.leftView = btn;
}
return self;
}
//leftViewのtarget/actionをセットする。
//複数のTextFieldがある場合、どれか区別がつくようにtagを設定する。
//部品が配置されるViewContollerなどから呼び、ボタンのtarget/actionをセットする。
- (void)addLeftButtonAction:(id)target action:(SEL)selector tag:(NSInteger)tag;
{
[(id)self.leftView addTarget:target action:selector
forControlEvents:UIControlEventTouchUpInside];
self.leftView.tag = tag;
}
//firstResponderになるときにleftViewを表示。
- (BOOL)becomeFirstResponder
{
self.leftViewMode = UITextFieldViewModeAlways;
return [super becomeFirstResponder];
}
//firstResponderでなくなるときにleftViewを非表示。
- (BOOL)resignFirstResponder
{
self.leftViewMode = UITextFieldViewModeNever;
return [super resignFirstResponder];
}