iOS自定义数字键盘

本文来自 海之飞燕 http://v2it.win/?p=662

因为的UIKeyboardTypeNumberPad类型的键盘没有完成按钮,为了自己加这个按钮,网上有N种方法,大体的思路就是:在获得键盘弹出通知时,在键盘的那个UIView上添加一个自定义的UIButton,但是这些方法都存在问题:

1.使用UIKeyboardWillShowNotification时,我在iphone4.3及5.0模拟器上发现keyboard视图还没有创建出来

2.ios5上,要根据不同的uiview description来找到keyboard,版本不同descruption不同

3.ios5上,添加UIButton的位置不同(x,y坐标都为负数才能显示按钮),并且按钮加上后不能被点击

 

 

 

#define KEY_WIDTH 106

#define KEY_HEIGHT 53

 

 

#pragma mark - 处理TextField响应事件

- (void)editingDidBegin:(UITextField *)textF {

    [self.textFbecomeFirstResponder];

}

 

//3.实现通知处理

- (void)handleKeyboardWillHide:(NSNotification *)notification

{

    if (doneInKeyboardButton.superview)

    {

        [doneInKeyboardButtonremoveFromSuperview];

    }

    

}

 

- (void)handleKeyboardDidShow:(NSNotification *)notification

{

    NSDictionary *info = [notificationuserInfo];

    CGSize kbSize = [[infoobjectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size;

    CGFloat normalKeyboardHeight = kbSize.height;

    int cnt = [[UIApplicationsharedApplication] windows].count;

    UIWindow* tempWindow = [[[UIApplicationsharedApplication] windows] objectAtIndex:cnt-1];

    // create custom button

    if (doneInKeyboardButton ==nil)

    {

        doneInKeyboardButton = [UIButtonbuttonWithType:UIButtonTypeCustom];

        

        doneInKeyboardButton.frame =CGRectMake(18, tempWindow.frame.size.height-53,106, 53);

        

        doneInKeyboardButton.adjustsImageWhenHighlighted =NO;

        [doneInKeyboardButtonsetImage:[UIImageimageNamed:@"done.png"]forState:UIControlStateNormal];

        [doneInKeyboardButtonsetImage:[UIImageimageNamed:@"done.png"]forState:UIControlStateHighlighted];

        [doneInKeyboardButtonaddTarget:selfaction:@selector(finishAction)forControlEvents:UIControlEventTouchUpInside];

    }

    

    

    // locate keyboard view

    

    

    if (doneInKeyboardButton.superview == nil)

    {

        // 注意这里直接加到window上

        [tempWindow addSubview:doneInKeyboardButton];

    }

    

}  

 

#pragma mark - 处理视图响应事件

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    [self.textFresignFirstResponder];

}

 

-(void)viewWillAppear:(BOOL)animated

{

    [superviewWillAppear:animated];

    //1. 先注册通知

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(handleKeyboardDidShow:)name:UIKeyboardDidShowNotificationobject:nil];

    

    [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(handleKeyboardWillHide:)name:UIKeyboardWillHideNotificationobject:nil];

}

//2. 在dealloc中反注册通知

-(void)dealloc

{

    [[NSNotificationCenterdefaultCenter] removeObserver:self];

}

原文:http://v2it.win/?p=662

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值