`
fosa0989
  • 浏览: 110205 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ios: 一个用户自定义键盘的例子

 
阅读更多

 If you have ever written an iPhone app that requires numeric input, then you surely know about the UIKeyboardTypeNumberPad. And if you have ever used that flavor of the iPhone's keyboard, then you surely know that it lacks one very important feature: The UIKeyboardTypeNumberPad does not have a "return" key.

In fact every other keyboard type (except for the pretty similar UIKeyboardTypePhonePad) does offer the possibility to be dismissed by setting the returnKeyType property of the corresponding UITextInputTraits implementor. So how does one achieve the same effect with the number pad? We have found a workround!

When looking at the number pad, you'll notice that there is an unused space on its bottom left. That's where we are going to plug in our custom "return" key.

To make it short: take a screenshot, cut out the whole backspace key, flip it horizotally, clear its backspace symbol in Photoshop and overlay it with the text that we want on our “return” key. We’ve chosen to label it “DONE”. Now we have the image for our custom button’s UIControlStateNormal. Repeat the whole procedure (with a touched backspace key when taking the screenshot) to get a second image for our button’s UIControlStateHighlighted. Here’s the result:

 

 

Now back to coding. First we need to know when the number pad is going to be slided up on the screen so we can plug in our custom button before that happens. Luckily there’s a notification for exactly that purpose, and registering for it is as easy as:

 
[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(keyboardWillShow:) 
                                             name:UIKeyboardWillShowNotification 
                                           object:nil];
 

Don't forget to remove the observer from the notification center in the appropriate place once you're done with the whole thing:

 
[[NSNotificationCenter defaultCenter] removeObserver:self];

Now we’re getting to the heart of it. All we have to do in the keyboardWillShow method is to locate the keyboard view and add our button to it. The keyboard view is part of a second UIWindow of our application as others have already figured out (see this thread). So we take a reference to that window (it will be the second window in most cases, so objectAtIndex:1 in the code below is fine), traverse its view hierarchy until we find the keyboard and add the button to its lower left:

 
- (void)keyboardWillShow:(NSNotification *)note {  
    // create custom button
    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    doneButton.frame = CGRectMake(0, 163, 106, 53);
    doneButton.adjustsImageWhenHighlighted = NO;
    [doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
    [doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
    [doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];
 
    // locate keyboard view
    UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
    UIView* keyboard;
    for(int i=0; i<[tempWindow.subviews count]; i++) {
        keyboard = [tempWindow.subviews objectAtIndex:i];
        // keyboard view found; add the custom button to it
        if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
            [keyboard addSubview:doneButton];
    }
}

Voilà, that’s it! The empty space for our button starts at coordinate (0, 163) and has the dimensions (106, 53). The doneButton method has to be written now of course, but that’s not hard any more. Just make sure that you call resignFirstResponder on the text field that is being edited to have the keyboard slide down.

 

分享到:
评论

相关推荐

    IOS应用源码之自定义数字键盘.zip

    在iOS应用开发中,自定义数字键盘是一种常见的需求,它可以让开发者根据具体的应用场景和用户交互设计提供更...通过研究和学习这个例子,开发者可以更好地理解和掌握自定义键盘的实现方式,进一步提升应用的用户体验。

    IOS应用源码之自定义的数字键盘.zip

    在iOS应用开发中,自定义...这个压缩包中的源码应该包含了一个完整的例子,你可以通过研究它的代码来学习和理解以上提到的各个步骤。通过实际操作,你可以更好地掌握自定义键盘的创建过程,并将其应用到自己的项目中。

    六位密码输入框加自定义键盘

    2. 设计自定义键盘:在Android中,可以通过自定义`InputMethodService`来实现,而在iOS中,可以创建一个`UIKeyboardType`的子类。键盘布局可以根据需求进行定制,例如设置按键乱序。 3. 关联键盘与输入框:在...

    ios-自定义安全键盘。在别人的基础上写的 。这里是Swift 的使用.zip

    在iOS开发中,为了增强应用的安全性和用户体验,有时开发者会选择自定义键盘替代系统默认的键盘。这个名为"ios-自定义安全键盘。在别人的基础上写的。这里是Swift 的使用.zip"的压缩包,提供了使用Swift语言实现...

    自定义数字键盘.zipIOS应用例子源码下载

    这个"自定义数字键盘.zip"文件提供了一个实际的iOS应用例子,可以帮助开发者学习如何创建自己的键盘界面,以满足特定的用户体验或安全需求。 首先,我们要了解iOS系统自带的键盘虽然功能强大,但在某些情况下可能...

    ios-Swift自定义表情键盘.zip

    本项目"ios-Swift自定义表情键盘.zip"就是一个专注于Swift编程语言实现自定义表情键盘的例子。下面我们将详细探讨Swift自定义键盘的实现原理和关键步骤。 首先,我们要了解iOS中的键盘类型。系统提供了多种键盘类型...

    自定义的数字键盘.zipIOS应用例子源码下载

    1. **自定义键盘视图**:在iOS中,我们可以创建一个UIView的子类来作为自定义键盘。这个视图包含我们需要的按钮,并通过UIControl的事件代理方法来处理按钮的点击事件。在Xcode中,可以通过Interface Builder设计...

    Keykulator:示例自定义 iOS8 键盘项目,让您像基本计算器一样在键盘中进行计算

    "Keykulator" 是一个项目,它展示了如何在iOS 8及更高版本中创建一个自定义键盘,这个键盘具有类似基础计算器的功能。用户可以通过这个键盘直接在输入框内进行简单的数学计算,而无需切换到系统自带的计算器应用。 ...

    ios-仿facebook 评论键盘.zip

    4. **UIInputViewController**: 自定义键盘通常基于`UIInputViewController`类,它是iOS 8及更高版本中引入的一个新控制器,用于创建自定义输入视图,如键盘。 5. **Text Input Delegate**: 实现键盘的输入功能,...

    ios-键盘弹出.zip

    在iOS开发中,键盘管理是用户体验的一个重要方面。"ios-键盘弹出.zip"这个压缩包文件显然聚焦于如何在iOS应用中优雅地处理键盘的显示和隐藏,以及通过代理和通知来传递值。让我们深入探讨一下这些关键知识点。 首先...

    iOS自定义安全键盘

    在iOS开发中,为了增强应用的安全性,有时我们需要自定义安全键盘来替代系统默认的键盘。自定义键盘可以避免用户输入信息时被第三方...同时,这个开源项目也为iOS开发者提供了一个研究和学习自定义键盘实现的好例子。

    ios-仿支付宝数字键盘.zip

    这个"ios-仿支付宝数字键盘.zip"资源就是一个实现此类需求的例子。它包含了一个名为"RYNumberKeyboardDemo"的项目,用于展示如何创建一个模仿支付宝界面风格的数字输入键盘。 首先,支付宝数字键盘通常具有简洁明了...

    swift-自定义键盘自带简单的计算

    在自定义键盘的`UIInputViewController`子类中,你可以调用`calculate(expression:)`函数,将用户输入的表达式转换为结果,并可能将其显示在一个结果显示视图上。 最后,别忘了处理清除按钮的点击事件,清空表达式...

    ios-带有placeholder的TextView和跟随键盘移动的textfield.zip

    在这个项目"ios-带有placeholder的TextView和跟随键盘移动的textfield.zip"中,开发者`fengzhihao123`分享了一个实现自定义功能的例子,主要关注了`UITextField`的placeholder显示和`UITextView`的键盘适配。...

    ios-键盘锁.zip

    总结来说,"ios-键盘锁.zip"是一个使用Quartz 2D技术和链表数据结构实现的自定义键盘锁示例。它展示了如何在iOS应用中创建一个安全、个性化的用户输入界面,对于学习iOS图形绘制和数据结构的开发者来说,这是一个很...

    ios-自定义评论textView.zip

    总之,"ios-自定义评论textView.zip"项目提供了一个实用的自定义TextView示例,开发者可以从中学习到如何在iOS应用中实现自定义文本输入视图,以及如何优化用户体验。如果你在开发中需要用到类似的功能,这个开源...

    iOS日期选择器简单例子

    本示例将探讨如何创建一个简单的iOS日期选择器,并实现一个自定义的toolbar与之配合,以提供更好的用户体验。以下将详细介绍这个过程,以及相关的知识点。 首先,我们需要了解iOS中的日期选择器类型。在iOS中,日期...

    TKKeyBoard:自定义键盘

    让我们从一个简单的例子开始 UITextField *textField = [[UITextField alloc ] init ]; textField.keyboardType = TKKeyboardTypeIntegerPad; [ self .view addSubview: textField]; [textField release ]; 这...

    iOS Swift Programming Cookbook

    - 书中提供了创建自定义键盘的具体步骤,包括如何设计键盘布局、处理按键输入等,并展示了如何创建一个简单的键盘扩展程序。 3. **访问用户的健康数据(HealthKit):** - HealthKit是一个强大的框架,允许开发者...

    自定义按钮

    在"colorTest"这个例子中,可能是一个用于测试按钮颜色变化的应用。开发者可能通过不同的颜色方案来演示如何自定义按钮的色彩,以展示不同风格和场景下的按钮设计。这可能涉及到CSS的color属性,或者在Android和iOS...

Global site tag (gtag.js) - Google Analytics