当前位置: 首页 > 编程笔记 >

iOS应用开发中导航栏按钮UIBarButtonItem的添加教程

程举
2023-03-14
本文向大家介绍iOS应用开发中导航栏按钮UIBarButtonItem的添加教程,包括了iOS应用开发中导航栏按钮UIBarButtonItem的添加教程的使用技巧和注意事项,需要的朋友参考一下

1、UINavigationController导航控制器如何使用
UINavigationController可以翻译为导航控制器,在iOS里经常用到。
我们看看它的如何使用:
下面的图显示了导航控制器的流程。最左侧是根视图,当用户点击其中的General项时 ,General视图会滑入屏幕;当用户继续点击Auto-Lock项时,Auto-Lock视图将滑入屏幕。相应地,在对象管理上,导航控制器使用了导航堆栈。根视图控制器在堆栈最底层,接下来入栈的是General视图控制器和Auto-Lock视图控制器。可以调用pushViewControllerAnimated:方法将视图控制器推入栈顶,也可以调用popViewControllerAnimated:方法将视图控制

2、UINavigationController的结构组成
看下图,UINavigationController有Navigation bar  ,Navigation View ,Navigation toobar等组成。

现在我们建立一个例子,看看如何使用UINavigationController
3、新建一个项目
命名为UINavigationControllerDemo,为了更好理解UINavigationController,我们选择Empty Application模板

4、创建一个View Controller,命名为RootViewController:依次选择File——New——New File,默认勾上With XIB for user interface.

选择正确位置创建完成,这时项目里多了三个文件,分别是RootViewController.h RootViewController.m RootViewController.xib文件。
打开RootViewController.xib,添加一个按钮控件,按钮Button改成 :Goto SecondView,为跳转做准备

5、打开AppDelegate.h,向其中添加属性:


@property (strong, nonatomic) UINavigationController *navController;  


添加后AppDelegate.h文件代码如下:

#import <UIKit/UIKit.h>  

  

@class ViewController;  

  

@interface AppDelegate : UIResponder <UIApplicationDelegate>  

  

@property (strong, nonatomic) UIWindow *window;  

  

@property (strong, nonatomic) ViewController *viewController;  

  

@property (strong, nonatomic) UINavigationController *navController;  

  

@end  


6、在AppDelegate.m 文件的didFinishLaunchingWithOptions方法中创建添加navController,RootViewController视图。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  

{  

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  

    RootViewController *rootView = [[RootViewController alloc] init];  

    rootView.title = @"Root View";  

      

    self.navController = [[UINavigationController alloc] init];  

    [self.navController pushViewController:rootView animated:YES];  

    [self.window addSubview:self.navController.view];  

    [self.window makeKeyAndVisible];  

    return YES;  

}  


给rootView的titie命名为 Root View,好识别View直接的切换关系。用pushViewController把rootView加入到navController的视图栈中。
7、现在Root视图添加完成
看看效果:

现在还没有Navigation bar 。只有title。
8、添加UIBarButtonItem
bar ButtonItem分左右UIBarButtonItem。我们把左右的都添加上去。
在RootViewController.m中添加代码如下:


- (void)viewDidLoad  

{  

    [super viewDidLoad];  

  

    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(selectLeftAction:)];  

    self.navigationItem.leftBarButtonItem = leftButton;  

      

    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd  target:self action:@selector(selectRightAction:)];  

    self.navigationItem.rightBarButtonItem = rightButton;<p class="p1">}


这样添加了UIBarButtonItem了,效果如下:

这里重点介绍下


UIBarButtonItem *leftButton = [[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemActiontarget:selfaction:@selector(selectLeftAction:)];


UIBarButtonSystemItemAction的风格,这是系统自带的按钮风格,看下图,你不用一个个试验,你也知道想用那个item,如下图:

9、响应UIBarButtonItem的事件的实现
我们在 action:@selector(selectLeftAction:);
action添加了selectLeftAction和selectRightAction
在RootViewController.m文件中添加代码实现:


-(void)selectLeftAction:(id)sender  

{  

    UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你点击了导航栏左按钮" delegate:self  cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];  

    [alter show];  

}  

  

-(void)selectRightAction:(id)sender  

{  

    UIAlertView *alter = [[UIAlertView alloc] initWithTitle:@"提示" message:@"你点击了导航栏右按钮" delegate:self  cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];  

    [alter show];  

}

 
这样在点击左右的UIBarButtonItem时,弹出提示:


两个按钮切换的简单例子

下面这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add button。代码实现的按钮切换/隐藏功能具体就是:点击 edti button 的话,back button 隐藏,同时显示 add button。用户编辑完以后则显示 back button 隐藏 add button。这一功能在很多应用里都会用到,而且适当隐藏掉无用按钮对保持界面简洁以及引导用户操作都是有意义的。


- (void)viewDidLoad {

[super viewDidLoad];

self.navigationItem.rightBarButtonItem = self.editButtonItem;

}

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {

 

    [super setEditing:editing animated:animated];

 

// Don't show the Back button while editing.

[self.navigationItem setHidesBackButton:editing animated:YES];

 

if (editing) {

    self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertMe)] autorelease];

}else {

    self.navigationItem.leftBarButtonItem = nil;

//self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(backButton) ] autorelease];

 }

}

 类似资料:
  • 问题内容: 我正在尝试使用导航栏(“后退”按钮,标题等)和选项卡栏(底部的工具栏)制作一个应用程序。我使用的是子视图,因此不必担心状态栏,导航栏,标签栏的高度等问题。但是我认为这给我带来了麻烦,因为我似乎无法弄清楚如何设置导航栏和标签栏。 这就是我所拥有的。我究竟做错了什么? AppDelegate.h AppDelegate.m ViewController.h ViewController.m

  • 问题内容: 此代码在ios10中可以正常工作。我得到我的标签和一个图像按钮,该按钮是用户照片资料,圆形。.好的。但是当运行xcode 9 ios11模拟器时,我将其拉长了。当检查sim并获取视图并告诉xcode描述视图时,按钮帧必须为32x32,我将输出为170x32或类似的东西。 这是我的代码。 问题答案: 原因 出现问题是因为从ios 11 使用自动布局而不是处理帧。 解 如果使用Xcode

  • 问题内容: 我一直在寻找这种解决方案已有一段时间,但是没有任何解决方案。例如一个解决方案是 此代码将添加带有“停止”图像的按钮。就像这样,还有其他解决方案,例如“搜索,刷新”等。但是 ,如果我想以编程方式在想要的图像上添加按钮,该怎么办? 问题答案: 自定义按钮图片,未设置按钮框: 您可以使用指定的图像和其他属性来初始化新项目。 检查此Apple文档。参考 UIBarButtonItem具有使用按

  • 将导航栏或工具栏(情节提要)拖动到视图控制器时出现问题。 UINavigationBar: 如上图所示,右键几乎与状态栏重叠。 与UIToolbar发生相同的情况: 此视图控制器旨在用作模式,这就是我不使用UINavigationController的原因。 在另一节中,我使用了一个UINavigationController,它的外观与我预期的一样: 如何将UINavigationBar/UIT

  • 本文向大家介绍iOS开发中导航控制器的基本使用教程,包括了iOS开发中导航控制器的基本使用教程的使用技巧和注意事项,需要的朋友参考一下 多控制器和导航控制器简单介绍 一、多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单。当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个view时,可以用一个大的view去管理1个或者多个小view,控制器也是如此,用1个

  • 怎么在导航栏右边加个按钮