`
zl4393753
  • 浏览: 340353 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

UINavigationBar,UIBarButtonItem 相关

 
阅读更多
1. Adding a Custom UIBarButtonItem
We will use an image in the resources folder called “back.png”. To insert the image as the back button, add this piece of code to the AppDelegate.m file. This should be in the application:didFinishLaunchingWihOptions method.
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIImage *navBarImage = [UIImage imageNamed:@"menubar.png"];

     [[UINavigationBar appearance] setBackgroundImage:navBarImage
                                       forBarMetrics:UIBarMetricsDefault];
    UIImage* backButtonImage = [UIImage imageNamed:@"back.png"];

     [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

     return YES;
}


2. A Simple Way to Animate a UIBarButtonItem
My first pass solution to animate a UIBarButtonItem was to initialize it's custom view with a UIImageView. The UIImageView can then be set up for animation with multiple images. Calling startAnimaiton/stopAnimation on the UIImaveView will then animate. This is great for animating buttons in tool and tab bars.

One problem is that the when initializing the UIImageView into the UIBarButtonItem, the UIBarButtonItem does not respond to touch events. Yuk.

A simple solution is to initialize the UIBarButtonItem custom view with a UIButton, then touch events for the UIBarButtonItem item are handle correctly.

But the UIButton does not have a way to use a UIImageView only UIImages. We want to use the UIImageView for its simple animation.

The solution is to add the UIImageView as a subview of the UIButton.

Here is the code.
NSArray *images = [NSArray arrayWithObjects:
        [UIImage imageNamed:@"image0.png"],
        [UIImage imageNamed:@"image1.png"],
        nil];
imageView = [[UIImageView alloc] initWithImage:[UIImage  imageNamed:@"image0.png"]];
imageView.animationImages = images;

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.bounds = self.imageView.bounds;
[button addSubview:self.imageView];
[button addTarget:self action:@selector(buttonTouched:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButton = [[[UIBarButtonItem alloc] initWithCustomView: button] autorelease];

Some things to notice:
The UIButton is of zero area as it does not have its bounds set upon initialization, thus the bounds are initialized with the bounds of the UIImageView (which has its bounds initialized from the image).

The UIButton handles the action/target for the touch event. The UIBarButtonItem's action/target are not set.


To animate:
    [imageView startAnimating];

Have fun,
Sean

===========================================
As you know, until iOS 5 came out, we used drawRect override in AppDelegate to customize UINavigationBar. But know, iOS 5 give us some new method for styling (and old doesn’t work).

How to build app that will work on iOS 4 and iOS 5 with stylized UINavigationBar?

You must to do both!

In AppDelegate use this code:
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
UIImage *img = [UIImage imageNamed:@"navbar.png"];
[img drawInRect:rect];
}
@end


and in viewDidLoad method for iOS5 (in your view implementation):
if ([self.navigationController.navigationBar respondsToSelector:@selector( setBackgroundImage:forBarMetrics:)]){
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];
}


If you see, here we are asking if navbar will respondToSelector to avoid crash on iOS4!



分享到:
评论

相关推荐

    UINavigationBar Category

    在上面的代码中,我们遍历了UINavigationBar的所有子视图,找到属于UINavigationItemView的子视图,并进一步查找其中的UIBarButtonItem。然后,我们将这些按钮的frame设置为其imageView的frame,以限制其点击区域。...

    UINavigationBar的层次说明(附:简单实例源码)

    在iOS开发中,`UINavigationBar`是苹果提供的一个关键组件,它位于每个导航控制器(UINavigationController)的顶部,用于展示应用的导航结构。`UINavigationBar`通常包含一个标题,左侧和右侧的按钮,以及可能的...

    IOS 入门开发之创建标题栏UINavigationBar的使用

    在iOS应用开发中,UINavigationBar是苹果UIKit框架中的一个重要组件,主要用于展示应用程序的标题以及导航功能。在本文中,我们将深入探讨如何在iOS入门开发过程中创建和使用UINavigationBar,以便为用户提供清晰的...

    UIBarButtonItem Demo实例

    `UIBarButtonItem`是一个可以放置在`UINavigationBar`、`UIToolbar`或`UISplitViewController`上的视图对象。它可以是文字、图像或者两者结合,也可以是自定义视图。在`rightBarButtonItem`和`leftBarButtonItem`...

    iOS如何改变UIBarButtonItem的大小详解

    首先,我们了解一个默认情况:当通过`UIBarButtonItem`的初始化方法如`initWithImage:style:target:action:`创建按钮时,系统会自动设置其大小以填充整个UINavigationBar,这可能并不符合我们期望的尺寸效果。...

    LeftBarItem:UINavigationBar leftbaritem

    在iOS应用开发中,`UINavigationBar` 是一个至关重要的组件,它位于每个导航控制器(UINavigationController)的顶部,提供了一种方式来展示和管理屏幕间的层级导航。`UINavigationBar` 包含一个`titleView` 和可以...

    (0013)-iOS/iPhone/iPAD/iPod源代码-导航条(Navigation Bar)-NavBar

    这个资源包"NavBar"中可能包含相关的源代码示例,通过学习和实践这些代码,开发者可以深入理解如何在实际项目中灵活运用这些自定义技巧。同时,由于资源提示需在Mac环境下解压使用,我们可以推断里面可能包含了Xcode...

    iOS中的导航栏UINavigationBar与工具栏UIToolBar要点解析

    在iOS应用开发中,UINavigationBar和UIToolBar是两种重要的界面元素,它们分别用于实现导航功能和展示快捷操作。接下来我们将深入解析这两个组件的关键点。 首先,UINavigationBar是导航控制器...

    自定义导航栏,可以添加左中右barbutton

    总结起来,自定义导航栏包括了对UINavigationBar的外观定制,如背景色渐变,以及对UIBarButtonItem和UINavigationItem的使用,实现左右中三个区域的按钮布局。这个过程涉及到iOS UI设计原则,以及对Swift或Objective...

    自己写的一个NavgationBar与UIBarButtonIten更换自定义背景

    `NavigationBar`和`UIBarButtonItem`是苹果的UIKit框架中的两个重要组件,用于构建应用的导航结构和交互元素。本教程将深入探讨如何在Objective-C中为这两个元素更换自定义的背景图片,以实现更加独特且吸引人的设计...

    NavBar 的一个小例子

    1. **导入相关框架**:在源代码文件中,我们需要导入UIKit框架,因为NavBar和相关的视图控制器类都在这个框架中定义。导入语句如下: ```objective-c #import ``` 2. **创建UIViewController子类**:为了在...

    自定义导航栏

    UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back"] style:UIBarButtonItemStylePlain target:self action:@selector(handleBack)]; leftBarButtonItem....

    IOS应用源码之ios适用于iOS 5、iOS 6和iOS 7的自定义NavigationBar.zip

    下面将详细解释相关知识点。 1. 自定义`UINavigationBar`: - `UINavigationBar`是iOS中的一个内置组件,通常用于展示应用的导航结构。开发者可以通过自定义`UINavigationBar`的外观,如背景颜色、标题样式、按钮...

    create_navigationBar_for_code

    总的来说,创建和自定义iOS中的导航栏主要涉及`UINavigationBar`、`UINavigationItem`以及`UIBarButtonItem`等对象。通过灵活运用这些组件和属性,我们可以构建出满足各种需求的导航栏。在实际项目中,开发者通常还...

    定制某一个页面导航栏样式(页面加载前).zip

    "定制某一个页面导航栏样式(页面加载前)"这个主题涉及到的核心知识点主要集中在Objective-C(OC)编程语言,以及UIKit框架中的UINavigationController和UIBarItem等相关类。下面我们将深入探讨如何在页面加载前实现...

    ViewController的使用方法

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

    封装导航栏item

    1. 创建Category:可以为`UINavigationBar`或者`UINavigationController`创建一个分类,添加自定义的方法来设置Left Item和Right Item。 2. 使用Block:在封装的过程中引入Block,使得设置Item时可以直接传入点击...

    iOS 导航各种自定义样式

    在iOS应用开发中,导航栏(Navigation Bar)是界面布局中的关键组件,它为用户提供了一种在多个相关屏幕间导航的方式。本篇文章将深入探讨如何实现iOS导航的各种自定义样式,包括隐藏导航栏以及实现其各种变化效果。...

    郑州鹏越教育iOS入门第十课:UINavigateViewController

    ### UINavigationViewController基础概念 UINavigationViewController是一种特殊的视图...通过这些实验,你可以更加深入地了解如何有效地使用UINavigationViewController及其相关组件来构建具有丰富交互性的iOS应用。

Global site tag (gtag.js) - Google Analytics