iOS开发 键盘添加工具条(toolbar)
原文地址 http://gaohaijun.blog.163.com/blog/static/17669827120119233349519/
IOS 开发中,iphone/ipad/itouch采用的触摸设计,本身没有硬件键盘,一般都是点击输入框之后,弹出一个虚拟键盘出来,因此开发中,经常在完 成编辑输入之后,要写程序代码来关闭软键盘的输出,非常繁琐,当然关闭软键盘的方式有很多。本文要分享的是一个键盘顶部工具条的类,通过这个工具条,可以 很方便的关闭键盘,而且有上一项,下一项的输入框切换,非常方便,效果如下图所示:
一、KeyBoardTopBar类文件
1)KeyBoardTopBar.h头文件
#import <Foundation/Foundation.h>
@interface KeyBoardTopBar : NSObject {
UIToolbar *view; //工具条
NSArray *textFields; //输入框数组
BOOL allowShowPreAndNext; //是否显示上一项、下一项
BOOL isInNavigationController; //是否在导航视图中
UIBarButtonItem *prevButtonItem; //上一项按钮
UIBarButtonItem *nextButtonItem; //下一项按钮
UIBarButtonItem *hiddenButtonItem; //隐藏按钮
UIBarButtonItem *spaceButtonItem; //空白按钮
UITextField *currentTextField; //当前输入框
}
@property(nonatomic,retain) UIToolbar *view;
-(id)init;
-(void)setAllowShowPreAndNext:(BOOL)isShow;
-(void)setIsInNavigationController:(BOOL)isbool;
-(void)setTextFieldsArray:(NSArray *)array;
-(void)showPrevious;
-(void)showNext;
-(void)showBar:(UITextField *)textField;
-(void)HiddenKeyBoard;
@end
2)KeyBoardTopBar.m实现文件
#import "KeyBoardTopBar.h"
@implementation KeyBoardTopBar
@synthesize view;
//初始化控件和变量
-(id)init{
if((self = [super init])) {
prevButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"上一项" style:UIBarButtonItemStyleBordered target:self action:@selector(ShowPrevious)];
nextButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"下一项" style:UIBarButtonItemStyleBordered target:self action:@selector(ShowNext)];
hiddenButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"隐藏键盘" style:UIBarButtonItemStyleBordered target:self action:@selector(HiddenKeyBoard)];
spaceButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem: UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
view = [[UIToolbar alloc] initWithFrame:CGRectMake(0,480,320,44)];
view.barStyle = UIBarStyleBlackTranslucent;
view.items = [NSArray arrayWithObjects:prevButtonItem,nextButtonItem,spaceButtonItem,hiddenButtonItem,nil];
allowShowPreAndNext = YES;
textFields = nil;
isInNavigationController = YES;
currentTextField = nil;
}
return self;
}
//设置是否在导航视图中
-(void)setIsInNavigationController:(BOOL)isbool{
isInNavigationController = isbool;
}
//显示上一项
-(void)showPrevious{
if (textFields==nil) {
return;
}
NSInteger num = -1;
for (NSInteger i=0; i<[textFields count]; i++) {
if ([textFields objectAtIndex:i]==currentTextField) {
num = i;
break;
}
}
if (num>0){
[[textFields objectAtIndex:num] resignFirstResponder];
[[textFields objectAtIndex:num-1 ] becomeFirstResponder];
[self showBar:[textFields objectAtIndex:num-1]];
}
}
//显示下一项
-(void)showNext{
if (textFields==nil) {
return;
}
NSInteger num = -1;
for (NSInteger i=0; i<[textFields count]; i++) {
if ([textFields objectAtIndex:i]==currentTextField) {
num = i;
break;
}
}
if (num<[textFields count]-1){
[[textFields objectAtIndex:num] resignFirstResponder];
[[textFields objectAtIndex:num+1] becomeFirstResponder];
[self showBar:[textFields objectAtIndex:num+1]];
}
}
//显示工具条
-(void)showBar:(UITextField *)textField{
currentTextField = textField;
if (allowShowPreAndNext) {
[view setItems:[NSArray arrayWithObjects:prevButtonItem,nextButtonItem,spaceButtonItem,hiddenButtonItem,nil]];
}
else {
[view setItems:[NSArray arrayWithObjects:spaceButtonItem,hiddenButtonItem,nil]];
}
if (textFields==nil) {
prevButtonItem.enabled = NO;
nextButtonItem.enabled = NO;
}
else {
NSInteger num = -1;
for (NSInteger i=0; i<[textFields count]; i++) {
if ([textFields objectAtIndex:i]==currentTextField) {
num = i;
break;
}
}
if (num>0) {
prevButtonItem.enabled = YES;
}
else {
prevButtonItem.enabled = NO;
}
if (num<[textFields count]-1) {
nextButtonItem.enabled = YES;
}
else {
nextButtonItem.enabled = NO;
}
}
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
if (isInNavigationController) {
view.frame = CGRectMake(0, 201-40, 320, 44);
}
else {
view.frame = CGRectMake(0, 201, 320, 44);
}
[UIView commitAnimations];
}
//设置输入框数组
-(void)setTextFieldsArray:(NSArray *)array{
textFields = array;
}
//设置是否显示上一项和下一项按钮
-(void)setAllowShowPreAndNext:(BOOL)isShow{
allowShowPreAndNext = isShow;
}
//隐藏键盘和工具条
-(void)HiddenKeyBoard{
if (currentTextField!=nil) {
[currentTextField resignFirstResponder];
}
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.3];
view.frame = CGRectMake(0, 480, 320, 44);
[UIView commitAnimations];
}
- (void)dealloc {
[view release];
[textFields release];
[prevButtonItem release];
[nextButtonItem release];
[hiddenButtonItem release];
[currentTextField release];
[spaceButtonItem release];
[super dealloc];
}
@end
二、如何使用
1)在用到输入的controller类.h头文件中,首先引入导入KeyBoardTopBar:
#import "KeyBoardTopBar.h"
NSMutableArray *editFieldArray; //存放视图中可编辑的控件
KeyBoardTopBar *keyboardbar;
2)在用到输入的controller类.m实现文件中,首先初始化KeyBoardTopBar类的实例,如下:
keyboardbar = [[KeyBoardTopBar alloc]init];
[keyboardbar setAllowShowPreAndNext:YES];
[keyboardbar setIsInNavigationController:NO];
[keyboardbar setTextFieldsArray:editFieldArray];
[self.view addSubview:keyboardbar.view];
3)在用到输入的controller类.m实现文件中,在此以UITextField为例说明,在它的回调方法中,实现如下:
- (void)textFieldDidBeginEditing:(UITextField *)textField{
[keyboardbar showBar:textField];//KeyBoardTopBar的实例对象调用显示键盘方法
}
三、总结
上述的基本原理就是在键盘的上方,加一个透明状的工具条;当然不需要专门定义类,也可以的,可以直接在
需要调用键盘的地方加入工具条,让你的工具条随着键盘的出现而出现,消失而消失!
大道至简,有更好的方法,希望一起讨论交流,谢谢!
相关推荐
IOS下没有自带的下拉菜单需要自己去实现。主要结合textFieldView、pickerView、toolBar来制作一个菜单。下拉菜单对象是继承textFieldView对象,并且实现pickerView的滚动、选择数据的协议。在pickerView中选择完数据...
一个简单的ios日期选择器的示例,通过点击text弹出日期选择器 自定义toolbar跟随选择器一起弹出
ToolBar工具栏是视图View的属性,可以在工具栏上添加工具栏按钮Bar Button Item(可以是自定义的Custom、也可以是系统自带的BarButtonSystemItem ),视图控制器可以通过工具栏项对视图中内容进行操作。 注意事项: 在...
苹果iOS是由苹果公司开发的手持设备操作系统。苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad以及Apple TV等苹果产品上。iOS与苹果的Mac OS X...
一个适用于iOS和macOS的简单的跨平台工具栏/自定义输入附件视图库。 用Swift编写。 寻找... 类型安全,XPC可用的 (SourceKit)接口带有一些糖吗? 看看 :cat_face_with_wry_smile: 。 适用于macOS的浮动操作按钮...
IOS scrollview做的相册 大小图跟着移动,移动大图,小图跟着动;反之也是 手势做全屏 自定义toolbar
适用于 iOS 和 Android 的 Titanium 中的自定义工具栏。 许多混合框架(例如 Titanium)都是从“一次编码并部署到多个平台”的想法创建的。 但有时你真的不能那样做。 例如,您需要在屏幕底部放置一个用于用户选项...
WyhSelectedToolBar(自定义navigationToolBar结合tableView进行编辑操作) 内部实现了通过navigationToolBar 对cell进行编辑操作 cell高度自适应 cell可全选删除
自定义工具栏,可以做很多特效,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
写了一个小Demo,显示本地PDF格式文件,支持翻页、跳页、缩放。 先看一下效果图: iOS开发,显示PDF格式文件方法有很多: ... 上面两种都没有足够的自定义空间,不在这里做过多的介绍了,另外一种也就是本篇用
iOS和Android运行附带的-YouTube帧率更高! 什么键盘!? 很高兴你问 :grinning_face_with_sweat: ! :keyboard_selector: 移动键盘充其量是一种妥协。 通过在其顶部附加工具栏,使它们更易于使用。 :goal_net: ...
抖音短视频iOSapp,toolBar上的闪烁动画,物有所值,可自定义属性,喜欢的话就好评一下 ( :
或将与Podfile使用: pod 'Navigation-Toolbar' 或用户可以简单地添加到其Cartfile : github "Ramotion/navigation-toolbar"用法故事板创建一个继承自NavigationView的新UIView 使用配置为每个必需的屏幕创建...
来源:Licence:CC BY-SA 3.0平台:iOS设备:iPhone作者:Greg Wang 实现弹出工具条(tool bar),并且在工具条上加上其他控件。实现类似iPhone自带邮件app发送邮件时,屏幕底部弹出的tool bar,显示邮件发送状态...
作者zhouxubin,源码EmoticonKeyboard,一款用swift写的简单地自定义表情键盘,颜色支持自定义 下面是基本用法: import UIKit class ViewController: UIViewController { @IBOutlet weak var textView: ...
一、Date Picker控件 1.简单介绍: ...最大的用途在于自定义键盘:弹出一个日期选择器出来,示例代码如下: 2.示例代码 代码如下: // // YYViewController.m // datepicker // // Created
Xamarin表单中的导航栏自定义 博客文章: : 产品特点 标题/字幕定位 字幕 条形渐变背景 标题字体定制 字幕字体自定义 格式化标题 格式化字幕 图片标题 酒吧背景 条影 酒吧不透明度 头衔保证金 标题填充 标题边框 ...
有时候我们的页面内容过长的时候,滑动到页面底部用户再滑动到顶部很麻烦,Android不像iOS可以点击statusBar回到顶部,一般都是双击Toolbar/ActionBar或者在底部放一个按钮。 今天就底部放一个回到顶部按钮这个效果...
来源:Licence:Unspecified平台:iOS设备:iPhone / iPad作者:Fraerman Arkady 自定义picker的颜色、toolbar等等。 Code4App编译测试,适用环境:Xcode 4.3, iOS 5.0。
您可以使用ProgressWebViewController访问自签名证书网站) :check_mark_button: 自定义条形按钮项目 :check_mark_button: 将Cookie分配到Web视图 :check_mark_button: 浏览本地html文件 :check_mark_button: 在iOS ...