`
zjjzmw1
  • 浏览: 1368776 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

ios toolbar 的自定义

    博客分类:
  • iOS
 
阅读更多

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下自定义下拉菜单的实现

    在实际的iOS开发中,自定义下拉菜单是一个常见的需求,因此开发者需要对各个控件的属性和事件处理有充分的了解。通过上述步骤,我们可以实现一个功能完备的下拉菜单,虽然它需要多个组件协同工作,但最终的用户体验...

    IOS toolbar,NavigationItem,UISegmentedControl,tableview和titile的例子

    1. iOS中的工具栏(Toolbar)的使用和自定义。 2. 导航栏(Navigation Bar)的结构及`NavigationItem`的配置。 3. `UISegmentedControl`的创建与应用,特别是在导航栏中的使用。 4. `UITableView`的基本操作和自定义...

    IOS Toolbar示例

    在iOS应用开发中,`Toolbar`和`NavigationController`是两个关键组件,它们极大地提升了用户界面的可操作性和用户体验。`Toolbar`通常被用作底部的工具栏,展示一系列按钮或者快捷方式,而`NavigationController`则...

    模仿IOS音乐的自定义导航栏功能

    在Android应用开发中,模仿iOS音乐App的自定义导航栏功能是一项常见的需求,这能为用户提供更加美观且一致的交互体验。iOS音乐App的导航栏以其简洁、清晰的设计著称,通常包括标题、左侧返回按钮以及一些特色的操作...

    自定义Toolbar布局+SegmentedGroup

    在Android开发中,`Toolbar`已经逐渐取代了传统的`ActionBar`,成为了自定义化程度更高的导航栏组件。它允许开发者自由地设计布局,提供更丰富的交互体验。本实例重点讲解如何自定义`Toolbar`布局,并结合`...

    xamarin toolbar入门例子

    例如,Android 上的 Toolbar 可以包含更多的自定义视图,如搜索栏,而在 iOS 上,Navigation Bar 的布局更加受限。如果需要更复杂的定制,可以使用 PlatformSpecific 特性或 Effects 来实现。 5. 示例项目 "Toolbar...

    ios-KeyboardToolBar.zip

    `ios-KeyboardToolBar.zip`是一个包含源代码的压缩包,其核心功能是创建一个自定义的工具栏,该工具栏会随着键盘的出现和消失而动态调整位置。这个工具栏可以包含各种按钮,如“Done”(完成)、“Cancel”(取消)...

    iOS键盘带控制器

    不过,iOS对自定义键盘的权限控制较严,需要在Info.plist文件中设置相应的键值对,并且需要用户在设置中明确允许才能使用。 3. **Keyboard Extension**:自定义键盘的实现需要创建一个新的目标类型——Keyboard ...

    Android仿IOS的圆角设置界面。

    3. Action Bar(或ToolBar):iOS中的导航栏与Android的Action Bar/ToolBar有明显的视觉差异。在Android中,我们可以使用`SherlockActionBar`库(如`library_actionbarsherlock`)来实现与iOS类似的导航栏,它提供了...

    自定义图标工具栏

    在移动应用开发中,如Android,我们可以通过`android.widget.Toolbar`类来创建自定义工具栏。每个图标通常是一个`MenuItem`,通过`menu.xml`文件定义,并在`onOptionsItemSelected(MenuItem item)`回调中处理点击...

    Collapsing Toolbars-可以伸缩的ToolBar

    在Android开发中,Collapsing Toolbar是Android设计支持库提供的一种功能强大的布局组件,它允许ToolBar在用户滚动视图时动态地改变其高度和可见性,从而实现类似iOS中的Parallax效果,为应用添加丰富的视觉体验。...

    C# xamarin android自定义标题栏

    默认情况下,Toolbar会显示一个返回按钮,你可以自定义它的图标和行为: ```csharp SupportActionBar.SetHomeAsUpIndicator(Resource.Drawable.ic_back); SupportActionBar.SetDisplayHomeAsUpEnabled(true); `...

    iOS日期选择器简单例子

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

    UINavigationController详解与使用(三)ToolBar

    通过本文的讲解,你应该对如何在`UINavigationController`中使用ToolBar有了更清晰的认识,同时也了解了如何自定义导航栏和使用相关工具进行调试。在实际项目中,你可以结合这些知识,创造出更符合用户需求的交互...

    iOS 底部工具条

    在iOS应用开发中,底部工具条(BottomToolBar)通常用于为用户提供快捷操作入口,它类似于系统的TabBar,但更加灵活,可以根据应用场景动态显示或隐藏。本文将深入探讨如何模仿系统底部弹出菜单工具框,实现向上推出...

    仿ios选择器

    总结来说,这个项目为Android开发者提供了一个可以在Eclipse环境中使用的仿iOS选择器组件,包括一个核心的PickerScrollView自定义视图和appcompat_v7兼容性库。通过这个组件,开发者可以轻松地在Android应用中实现与...

    Android 仿IOS Segment、搜索框、开关按钮和时间选择.rar

    尽管Android和iOS有不同的设计原则,但通过适当的自定义,可以在保持原生体验的同时,满足用户对视觉一致性的需求。对于那些希望在Android应用中融入iOS元素的开发者来说,这是一个很好的实践案例。

    iphone自定义工具栏

    在iOS应用开发中,自定义工具栏(Toolbar)是一个常见的需求,它可以帮助我们提供更加个性化和功能丰富的用户体验。工具栏通常用于放置按钮、分割线等元素,以执行特定的操作或切换视图。本教程将深入探讨如何使用...

    iOS应用中使用Toolbar工具栏方式切换视图的方法详解

    本文将详细讲解如何在iOS应用中使用Toolbar来实现视图切换的方法,同时介绍UIToolbar的相关属性和方法。 首先,UIToolbar本身是一个视图对象,它可以包含多个UIBarButtonItem实例,这些按钮可以是系统预设样式,也...

    仿ios导航栏滚动的例子

    总结起来,这个例子通过结合`ToolBar`、`Fragment`、`CoordinatorLayout`、`NestedScrollView`以及自定义滚动监听和动画,成功实现了类似iOS的导航栏滚动效果。开发者可以根据具体需求调整滚动速度和动画细节,以...

Global site tag (gtag.js) - Google Analytics