首页 > 代码库 > iOS基础控件-UINavigationController 中的传值,代理传值,正向传值,反向传值
iOS基础控件-UINavigationController 中的传值,代理传值,正向传值,反向传值
/*
程序过程:
1,创建一个根视图,一个二级视图
2,根视图NavigationItem.title = Root 二级视图NavigationItem.title = Second
根视图NavigationItem.rightButton入栈二级视图
3, 二级视图中创建三个按钮按钮一 按钮二 按钮三 三个按钮点击时间都是出栈,并把自己的按钮的
titel 赋给根视图的NavigationItem.title
4,当再次进入二级视图时,判断根视图的NavigationItem.title和哪个按钮的title一样,如果
一样,就把按钮的title颜色设置为红色。
程序过程:
1,创建一个根视图,一个二级视图
2,根视图NavigationItem.title = Root 二级视图NavigationItem.title = Second
根视图NavigationItem.rightButton入栈二级视图
3, 二级视图中创建三个按钮按钮一 按钮二 按钮三 三个按钮点击时间都是出栈,并把自己的按钮的
titel 赋给根视图的NavigationItem.title
4,当再次进入二级视图时,判断根视图的NavigationItem.title和哪个按钮的title一样,如果
一样,就把按钮的title颜色设置为红色。
**总结
1,从第一层向第二层正向传参时:
在第二层页面中创建一个接收这个参数的属性
在第一层向第二层跳转时 创建完第二层的实例对象,
*/
*/
<SendValue.h>
#import <Foundation/Foundation.h>
@protocol SendValue <NSObject]]>
- (void)sendBtnTitle:(NSString*)title;
@end
@protocol SendValue <NSObject]]>
- (void)sendBtnTitle:(NSString*)title;
@end
<XSAppDelegate.m>
#import "XSAppDelegate.h"
#import "XSRootViewController.h"
@implementation XSAppDelegate
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
self.window= [[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]];
// Override point for customization after application launch.
self.window.backgroundColor= [UIColorwhiteColor];
XSRootViewController*rootViewController = [[XSRootViewControlleralloc]init];
UINavigationController*navController = [[UINavigationControlleralloc]initWithRootViewController:rootViewController];
self.window.rootViewController= navController;
[self.windowmakeKeyAndVisible];
return YES;
}
#import "XSRootViewController.h"
@implementation XSAppDelegate
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
self.window= [[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]];
// Override point for customization after application launch.
self.window.backgroundColor= [UIColorwhiteColor];
XSRootViewController*rootViewController = [[XSRootViewControlleralloc]init];
UINavigationController*navController = [[UINavigationControlleralloc]initWithRootViewController:rootViewController];
self.window.rootViewController= navController;
[self.windowmakeKeyAndVisible];
return YES;
}
<XSRootViewController.m>
#import "XSRootViewController.h"
#import "XSSecondViewController.h"
@interface XSRootViewController()
@end
@implementationXSRootViewController
- (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= [UIColoryellowColor];
self.navigationItem.title= @"Root";
UIBarButtonItem*btnItem = [[UIBarButtonItemalloc]initWithTitle:@"Push"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(btnClick:)];
self.navigationItem.rightBarButtonItem= btnItem;
}
//#pragma mark --SendVaule
- (void)sendBtnTitle:(NSString*)title
{
self.navigationItem.title= title;
}
- (void)btnClick:(UIBarButtonItem*)btnItem
{
XSSecondViewController*secondViewController = [[XSSecondViewControlleralloc]init];
secondViewController.delegate= self;
secondViewController.currentTitle= self.navigationItem.title;
[self.navigationControllerpushViewController:secondViewControlleranimated:YES];
}
#import "XSSecondViewController.h"
@interface XSRootViewController()
@end
@implementationXSRootViewController
- (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= [UIColoryellowColor];
self.navigationItem.title= @"Root";
UIBarButtonItem*btnItem = [[UIBarButtonItemalloc]initWithTitle:@"Push"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(btnClick:)];
self.navigationItem.rightBarButtonItem= btnItem;
}
//#pragma mark --SendVaule
- (void)sendBtnTitle:(NSString*)title
{
self.navigationItem.title= title;
}
- (void)btnClick:(UIBarButtonItem*)btnItem
{
XSSecondViewController*secondViewController = [[XSSecondViewControlleralloc]init];
secondViewController.delegate= self;
secondViewController.currentTitle= self.navigationItem.title;
[self.navigationControllerpushViewController:secondViewControlleranimated:YES];
}
<XSSecondViewController.h>
#import <UIKit/UIKit.h>
#import "SendValue.h"
@interface XSSecondViewController : UIViewController
//定义代理
@property (nonatomic,assign)id<SendValue> delegate;
//创建一个正向传值的属性,
@property (nonatomic,copy)NSString*currentTitle;
@end
#import "SendValue.h"
@interface XSSecondViewController : UIViewController
//定义代理
@property (nonatomic,assign)id<SendValue> delegate;
//创建一个正向传值的属性,
@property (nonatomic,copy)NSString*currentTitle;
@end
<XSSecondViewController.m>
#import "XSSecondViewController.h"
#import "XSRootViewController.h"
@interface XSSecondViewController()
@end
@implementationXSSecondViewController
- (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 = [[UIBarButtonItemalloc]initWithTitle:@"Pop"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(btnClick)];
self.navigationItem.leftBarButtonItem= btnItem;
self.view.backgroundColor= [UIColorblueColor];
UIButton*btn1 = [UIButtonbuttonWithType:UIButtonTypeSystem];
btn1.frame= CGRectMake(10, 80, 300, 40);
[btn1 setTitle:@"按键一"forState:UIControlStateNormal];
[btn1 setBackgroundColor:[UIColorwhiteColor]];
[btn1 addTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];
btn1.tag= 1;
//如果按钮的标题和属性中的_currentTitle相同,即和根页面中的导航条的title一样
if ([_currentTitleisEqualToString:btn1.currentTitle]) {
btn1.selected= YES;
}
//如果selected为YES就执行setTitleColor
[btn1 setTitleColor:[UIColorredColor]forState:UIControlStateSelected];
[self.viewaddSubview:btn1];
UIButton*btn2 = [UIButtonbuttonWithType:UIButtonTypeSystem];
btn2.frame= CGRectMake(10, 130, 300, 40);
[btn2 setTitle:@"按键二"forState:UIControlStateNormal];
[btn2 setBackgroundColor:[UIColorwhiteColor]];
[btn2 addTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];
btn2.tag= 2;
//如果按钮的标题和属性中的_currentTitle相同,即和根页面中的导航条的title一样
if ([_currentTitleisEqualToString:btn2.currentTitle]) {
btn2.selected= YES;
}
//如果selected为YES就执行setTitleColor
[btn2 setTitleColor:[UIColorredColor]forState:UIControlStateSelected];
[self.viewaddSubview:btn2];
UIButton*btn3 = [UIButtonbuttonWithType:UIButtonTypeSystem];
btn3.frame= CGRectMake(10, 180, 300, 40);
[btn3 setTitle:@"按键三"forState:UIControlStateNormal];
[btn3 setBackgroundColor:[UIColorwhiteColor]];
[btn3 addTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];
btn3.tag= 3;
//如果按钮的标题和属性中的_currentTitle相同,即和根页面中的导航条的title一样
if ([_currentTitleisEqualToString:btn3.currentTitle]) {
btn3.selected= YES;
}
//如果selected为YES就执行setTitleColor
[btn3 setTitleColor:[UIColorredColor]forState:UIControlStateSelected];
[self.viewaddSubview:btn3];
}
- (void)btnClick
{
[self.navigationControllerpopToRootViewControllerAnimated:YES];
}
- (void)btnClick:(UIButton*)btn
{
//取出按钮的标题
NSString*title = btn.currentTitle;
//判断代理中是否有sendBtnTitle:这个函数
if ([_delegate respondsToSelector:@selector(sendBtnTitle:)]) {
//代理执行自己的sendBtnTitle函数,传参是title
[_delegatesendBtnTitle:title];
}
[self.navigationControllerpopToRootViewControllerAnimated:YES];
}
#import "XSRootViewController.h"
@interface XSSecondViewController()
@end
@implementationXSSecondViewController
- (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 = [[UIBarButtonItemalloc]initWithTitle:@"Pop"style:UIBarButtonItemStylePlaintarget:selfaction:@selector(btnClick)];
self.navigationItem.leftBarButtonItem= btnItem;
self.view.backgroundColor= [UIColorblueColor];
UIButton*btn1 = [UIButtonbuttonWithType:UIButtonTypeSystem];
btn1.frame= CGRectMake(10, 80, 300, 40);
[btn1 setTitle:@"按键一"forState:UIControlStateNormal];
[btn1 setBackgroundColor:[UIColorwhiteColor]];
[btn1 addTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];
btn1.tag= 1;
//如果按钮的标题和属性中的_currentTitle相同,即和根页面中的导航条的title一样
if ([_currentTitleisEqualToString:btn1.currentTitle]) {
btn1.selected= YES;
}
//如果selected为YES就执行setTitleColor
[btn1 setTitleColor:[UIColorredColor]forState:UIControlStateSelected];
[self.viewaddSubview:btn1];
UIButton*btn2 = [UIButtonbuttonWithType:UIButtonTypeSystem];
btn2.frame= CGRectMake(10, 130, 300, 40);
[btn2 setTitle:@"按键二"forState:UIControlStateNormal];
[btn2 setBackgroundColor:[UIColorwhiteColor]];
[btn2 addTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];
btn2.tag= 2;
//如果按钮的标题和属性中的_currentTitle相同,即和根页面中的导航条的title一样
if ([_currentTitleisEqualToString:btn2.currentTitle]) {
btn2.selected= YES;
}
//如果selected为YES就执行setTitleColor
[btn2 setTitleColor:[UIColorredColor]forState:UIControlStateSelected];
[self.viewaddSubview:btn2];
UIButton*btn3 = [UIButtonbuttonWithType:UIButtonTypeSystem];
btn3.frame= CGRectMake(10, 180, 300, 40);
[btn3 setTitle:@"按键三"forState:UIControlStateNormal];
[btn3 setBackgroundColor:[UIColorwhiteColor]];
[btn3 addTarget:selfaction:@selector(btnClick:)forControlEvents:UIControlEventTouchUpInside];
btn3.tag= 3;
//如果按钮的标题和属性中的_currentTitle相同,即和根页面中的导航条的title一样
if ([_currentTitleisEqualToString:btn3.currentTitle]) {
btn3.selected= YES;
}
//如果selected为YES就执行setTitleColor
[btn3 setTitleColor:[UIColorredColor]forState:UIControlStateSelected];
[self.viewaddSubview:btn3];
}
- (void)btnClick
{
[self.navigationControllerpopToRootViewControllerAnimated:YES];
}
- (void)btnClick:(UIButton*)btn
{
//取出按钮的标题
NSString*title = btn.currentTitle;
//判断代理中是否有sendBtnTitle:这个函数
if ([_delegate respondsToSelector:@selector(sendBtnTitle:)]) {
//代理执行自己的sendBtnTitle函数,传参是title
[_delegatesendBtnTitle:title];
}
[self.navigationControllerpopToRootViewControllerAnimated:YES];
}
iOS基础控件-UINavigationController 中的传值,代理传值,正向传值,反向传值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。