iOS基础控件UINavigationController中的传值

iOS基础控件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

 

 

 

- (void)didButton{
    NSArray *btntitles = [NSArray arrayWithObjects:@"按键一",@"按键二",@"按键三", nil];
    
    for (int i=0; i<btntitles.count; i++) {
        UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
        //改变按键字体颜色
        [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [btn setTitle:[btntitles objectAtIndex:i] forState:UIControlStateNormal];
// 如果按钮的标题和属性中的 _currentTitle 相同,即和根页面中的导航条的 title 一样 
if([_currentTitle isEqualToString:btn.currentTitle]){
//开启选中状态 btn.selected
= YES; btn.tintColor = [UIColor whiteColor]; } [btn setTitleColor:[UIColor redColor] forState:UIControlStateSelected]; [btn addTarget:self action:@selector(titlebtnClicked:) forControlEvents:UIControlEventTouchUpInside]; btn.frame = CGRectMake(80, 140+60*i, self.view.frame.size.width-160, 40); btn.backgroundColor = [UIColor whiteColor]; [self.view addSubview:btn]; } } - (void)titlebtnClicked:(UIButton *)btn{ NSString *title = btn.currentTitle;

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

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

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

       [_delegate sendBtnTitle:title];

    }

    NSLog(@"%@",title);
    [self.navigationController popViewControllerAnimated:YES];
    
}
#import <UIKit/UIKit.h>
#define C(a,b,c,d) [UIColor colorWithRed:a/255.0 green:b/255.0 blue:c/255.0 alpha:d/255.0]
#define IMG(name) [UIImage imageNamed:name]


#import "FirstViewController.h"
//将协议挂过来
@interface rootViewController : UIViewController<SendValue>

@end
- (void)btnClicked{
    FirstViewController *first = [[FirstViewController alloc] init];
    //将当前页面的navigationItem.title传递进去
    //正向传值
    first.currentTitle = self.navigationItem.title;
    //将代理指定为当前rootViewController类的指针
    first.delegate = self;
    [self.navigationController pushViewController:first animated:YES];
}

//实现协议定义的方法
- (void)sendBtnTitle:(NSString *)title{
    self.navigationItem.title = title;
}

页面传值:

正向传值利用是属性传值;

反向传值利用代理传值;


属性传值:如果从A页面往B页面传值,在B页面中声明属性,在A页面中跳转事件中给B页面的属性赋值;
从后一个页面返回前一个页面不会执行前面页面的loadView和viewDidLoad方法,而是执行viewWillAppear方法,因为,loadView和viewDidLoad方法的作用是将视图加载到内存,而从后一个页面返回时,前一个页面已经加载到内存,所以不用再次加载,所以不执行loadView和ViewDidLoad方法;

 

代理传值:和代理设计模式一样,按照设置代理,遵循协议的那四步来就行,

     /*

     1,定义协议  (BaoMuProtocol)

     2,遵循协议的类  (Nurse)

     3.定义需要代理的类  (Mother)

     4.建立关系   (Mother中定义一个代理类型的成员变量)     

     */

posted @ 2015-05-03 01:56  apple家园  阅读(715)  评论(0编辑  收藏  举报