iOS基础控件-UINavigationController 中的传值,代理传值,正向传值,反向传值
程序过程:
1,创建一个根视图,一个二级视图
2,根视图 NavigationItem.title = Root 二级视图NavigationItem.title = Second
根视图NavigationItem.rightButton 入栈二级视图
3, 二级视图中创建三个按钮 按钮一 按钮二 按钮三 三个按钮点击时间都是出栈,并把自己的按钮的
titel 赋给 根视图的NavigationItem.title
4,当再次进入二级视图时,判断 根视图的NavigationItem.title 和哪个按钮的title一样,如果
一样,就把按钮的title颜色设置为红色。
*/
@protocol SendValue <NSObject]]>
- (void)sendBtnTitle:(NSString *)title;
@end
#import "XSRootViewController.h"
@implementation XSAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
XSRootViewController *rootViewController = [[XSRootViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
self.window.rootViewController = navController;
[self.window makeKeyAndVisible];
return YES;
}
#import "XSSecondViewController.h"
@interface XSRootViewController ()
@end
@implementation XSRootViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor yellowColor];
self.navigationItem.title = @"Root";
UIBarButtonItem *btnItem = [[UIBarButtonItem alloc] initWithTitle:@"Push" style:UIBarButtonItemStylePlain target:self action:@selector(btnClick:)];
self.navigationItem.rightBarButtonItem = btnItem;
}
//#pragma mark --SendVaule
- (void)sendBtnTitle:(NSString *)title
{
self.navigationItem.title = title;
}
- (void)btnClick:(UIBarButtonItem *)btnItem
{
XSSecondViewController *secondViewController = [[XSSecondViewController alloc] init];
secondViewController.delegate = self;
secondViewController.currentTitle = self.navigationItem.title;
[self.navigationController pushViewController:secondViewController animated:YES];
}
#import "SendValue.h"
@interface XSSecondViewController : UIViewController
//定义代理
@property (nonatomic,assign) id<SendValue> delegate;
//创建一个正向传值的属性,
@property (nonatomic,copy)NSString *currentTitle;
@end
#import "XSRootViewController.h"
@interface XSSecondViewController ()
@end
@implementation XSSecondViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIBarButtonItem *btnItem = [[UIBarButtonItem alloc] initWithTitle:@"Pop" style:UIBarButtonItemStylePlain target:self action:@selector(btnClick)];
self.navigationItem.leftBarButtonItem = btnItem;
self.view.backgroundColor = [UIColor blueColor];
UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeSystem];
btn1.frame = CGRectMake(10, 80, 300, 40);
[btn1 setTitle:@"按键一" forState:UIControlStateNormal];
[btn1 setBackgroundColor:[UIColor whiteColor]];
[btn1 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
btn1.tag = 1;
//如果按钮的标题和属性中的_currentTitle相同,即和根页面中的导航条的title一样
if ([_currentTitle isEqualToString:btn1.currentTitle]) {
btn1.selected = YES;
}
//如果selected为YES 就执行setTitleColor
[btn1 setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
[self.view addSubview:btn1];
UIButton *btn2 = [UIButton buttonWithType:UIButtonTypeSystem];
btn2.frame = CGRectMake(10, 130, 300, 40);
[btn2 setTitle:@"按键二" forState:UIControlStateNormal];
[btn2 setBackgroundColor:[UIColor whiteColor]];
[btn2 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
btn2.tag = 2;
//如果按钮的标题和属性中的_currentTitle相同,即和根页面中的导航条的title一样
if ([_currentTitle isEqualToString:btn2.currentTitle]) {
btn2.selected = YES;
}
//如果selected为YES 就执行setTitleColor
[btn2 setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
[self.view addSubview:btn2];
UIButton *btn3 = [UIButton buttonWithType:UIButtonTypeSystem];
btn3.frame = CGRectMake(10, 180, 300, 40);
[btn3 setTitle:@"按键三" forState:UIControlStateNormal];
[btn3 setBackgroundColor:[UIColor whiteColor]];
[btn3 addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
btn3.tag = 3;
//如果按钮的标题和属性中的_currentTitle相同,即和根页面中的导航条的title一样
if ([_currentTitle isEqualToString:btn3.currentTitle]) {
btn3.selected = YES;
}
//如果selected为YES 就执行setTitleColor
[btn3 setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
[self.view addSubview:btn3];
}
- (void)btnClick
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
- (void)btnClick:(UIButton *)btn
{
//取出按钮的标题
NSString *title = btn.currentTitle;
//判断代理中是否有sendBtnTitle:这个函数
if ([_delegate respondsToSelector:@selector(sendBtnTitle:)]) {
//代理 执行自己的sendBtnTitle 函数,传参是title
[_delegate sendBtnTitle:title];
}
[self.navigationController popToRootViewControllerAnimated:YES];
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。