UINavigationBar功能实现

转载 2015年07月09日 11:07:03

IOS5中:

-(void)setBackgroundImage:(UIImage)backgroundImage forBarMetrics:(UIBarMetrics)barMetrics

IOS6中:

在上面的方法基础上,加上[UIApplication  shareApplication].statusBarStyle = UIStatusBarStyleBlackOpaque;



基础控件UINavigationController中的传值,代理传值,正向传值,反向传值

#import <UIKit/UIKit.h>

//声明一个协议

@protocol SendValue<NSObject>

//定义一个方法

- (void)sendBtnTitle:(NSString *)title;

@end

@interface FirstViewController : UIViewController

// 定义代理

@property (nonatomic, assign) id <SendValue>delegate;

// 创建一个正向传值的属性

@property (nonatomic,copy) NSString *currentTitle;

@end
//正向传值利用的是属性传值

//反向传值利用代理传值

创建一个RootViewController类和FirstViewController

分别在AppDelegate.m中调用RootViewController.h   在RootViewController.m中调用 FirstViewController.h

在RootViewController.m

{

 self.view.backgroundColor = [UIColor redColor];

    self.navigationItem.title = @"Root";

    

    UIButton * btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

    [btn setTitle:@"push to VC2" forState:UIControlStateNormal];

    [btn setFrame:CGRectMake(30, 100, 300, 50)];

    [btn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:btn];

}


FirstViewController.h

//协议代理实现反向传值

//声明一个协议

@protocol SendValue <NSObject>

//定义一个方法

-(void)SendTitle:(NSString *)title;


@end


@interface 下面写上

//定义代理

@property (nonatomic,assign) id <SendValue> delegate;

//创建一个正向传值的属性

@property (nonatomic,copy) NSString *currentTitle;


FirstViewController.m中

@implementation 下面写上

@synthesize delegate = _delegate;

@synthesize currentTitle = _currentTitle;

- (void)viewDidLoad 

{

//UINavigationController中的反向传值问题

      

self.view.backgroundColor = [UIColor yellowColor];

//把标题放在一个数组中 利用for循环设置

    NSArray * btnTitles = [NSArray arrayWithObjects:@"标题1",@"标题2",@"标题3", nil];

    

    for (int i=0; i<[btnTitles count]; i++) {

        UIButton * btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

        //如果按钮的标题和属性中的_currentTitle 相同,即和根页面中的导航条的title一样

        if ([_currentTitle isEqualToString:btn.currentTitle]) {

        //开启选中状态

            btn.selected = YES;

        }

        

        [btn setTitle:[btnTitles objectAtIndex:i] forState:UIControlStateNormal];

        [btn addTarget:self action:@selector(titleBtnClicked:) forControlEvents:UIControlEventTouchUpInside];

        [btn setFrame:CGRectMake(10, 80+i*40, 300, 30)];

        [self.view addSubview:btn];


}

//titleBtnClicked:设置

-(void)titleBtnClicked:(UIButton *)btn

{

    NSString * title = btn.currentTitle;


//判断代理中是否有SendTitle:这个函数

    if([_delegate respondsToSelector:@selector(SendTitle:)]){

//代理执行自己的SendTitle 函数,传参是title

        [_delegate SendTitle:title];

    

    }

    

    [self.navigationController popViewControllerAnimated:YES];

}


在RootViewController.h中

#import <UIKit/UIKit.h>

添加头文件  #import "FirstViewController.h"

//把协议挂过来

@interface RootViewController : UIViewController <SendValue>


@end


- (void)btnClicked:(UIButton *)btn

{

    FirstViewController * first = [[FirstViewController alloc] init];

//将当前页面的navigaItem.title传递过去

//正向传值

    first.currentTitle = self.navigationItem.title;

//将代理指定为当前rootViewController类的指针

    first.delegate = self;

    [self.navigationController pushViewController:first animated:YES];

}

//实现协议定义的方法

-(void)SendTitle:(NSString *)title

{

    self.navigationItem.title = title;

}




UINavigationBar Category

  • 2015年04月15日 13:54
  • 2KB
  • 下载

UINavigationBar属性及返回按钮更改小结

有时候这些属性搞得蛮乱的,记录下以便查阅 UINavigationBar属性 如果想统一设置,可以通过以下方法,获取当前类下的所有对象的导航条,然后在+initialize方法中进行设置 ...
  • rabewu
  • rabewu
  • 2016年08月01日 14:49
  • 187

IOS_UI_UINavigationBar详解

  • 2015年05月24日 15:00
  • 424B
  • 下载

UINavigationBar属性及返回按钮更改小结

有时候这些属性搞得蛮乱的,记录下以便查阅 UINavigationBar属性 如果想统一设置,可以通过以下方法,获取当前类下的所有对象的导航条,然后在+initialize方法中进行设置 ...

UINavigationBar点击区域超出、覆盖的问题

Why does UINavigationBar steal touch events? http://stackoverflow.com/questions/9079907/why-does-...

[ios开发技巧之]UINavigationbar的背景修改方法集合

最近我突然发现UINavigationbar背景修改的方法不起作用了,代码如下: 1 2 3 4 5 6 7 8 9 @implementati...

导航条的使用 UINavigationBar

导航条继承与UIView,且通常只是作为多个UINavigationItem的容器,而且他以Stack的形式来管理多个UINavigationItem的控件,这意味着导航条上每次只能看到一个UINav...

UInavigationBar自定义导航栏背景和按钮(二)

现在我用的是Xcode 4.3,在使用上跟Xcode 4.2差不多。 1、首先运行Xcode 4.3,创建一个Single View Application,名称为UINavigationItem ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UINavigationBar功能实现
举报原因:
原因补充:

(最多只允许输入30个字)