2013年9月8日日曜日

UITextFieldのleftView追加例



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;
}

//leftViewtarget/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];
}

0 件のコメント: