iOS中的导航条(UISegmentedControl)的基本使用(界面中传值的3中方法)

Appdelegate中

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    //1.创建单视图控制器对象,
    FirstViewController *firstVC = [[FirstViewController alloc] init];
     //2.创建导航控制器,并且知道那个导航控制器的根视图控制器
    //0  64
    UINavigationController *navigatinVC = [[UINavigationController alloc] initWithRootViewController:firstVC];
    //3.将 导航控制器 作为window的根视图控制器
    self.window.rootViewController = navigatinVC;

    //4.释放
    [firstVC release];
    [navigatinVC release];
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}

FirstViewController

#import "FirstViewController.h"
#import "SecondViewController.h"
#import "Singleton.h"
//代理传值第四步:服从协议
@interface FirstViewController () <SecondViewControllerdelegate>

@end

/**
 *  导航控制器的工作原理
 导航控制器以栈的形式管理视图控制器,当进入下一界面时,该视图控制器入栈,当返回上一界面时,该视图控制器出栈,入栈前,视图控制器开辟空间,出栈后,视图控制器空间被系统回收,屏幕用于显示的是导航控制器的栈顶元素
 */
@implementation FirstViewController
#pragma mark --second view controller delegate
//代理传值第五步;前一个界面实现协议中的方法
- (void)passValue:(NSString *)data
{
   UILabel * label = (UILabel *)[self.view viewWithTag:200];
    label.text = data;
   //NSString *dd = [[(UILabel *)[self.view viewWithTag:200]] text];
}

#pragma mark -self.view
/*
//将要出现
- (void)viewWillAppear:(BOOL)animated
{

    [super viewWillAppear:animated];

}
//已经出现
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
//    NSLog(@"%s, %d", __FUNCTION__, __LINE__);
//     NSLog(@"superView--%@",self.view.superview);
}
//将要消失
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
   // NSLog(@"%s, %d", __FUNCTION__, __LINE__);
}
//已经消失
- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    //NSLog(@"%s, %d", __FUNCTION__, __LINE__);
}

*/

/**
 *  界面键传值之一:从前往后传
 葵花宝典:属性传值
 招式一:在后一个界面定义属性(属性的类型,要和传输数据的类型一致)
 招式二:在从前一个界面进入下一个界面之前,将数据传给下一界面.
 */

- (void)viewDidLoad {
     NSLog(@"%s, %d", __FUNCTION__, __LINE__);
    NSLog(@"superView--%@",self.view.superview);
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor redColor];
    //进入下一界面 button
    [self setupButton];
    [self configureNavigationBarCommonPropety];
    //[self customizationNavigationBarContent];

    //修改导航条上显示的文字的大小和颜色(针对所有界面统一设置)
//    NSDictionary *dic = @{NSForegroundColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:20]};
//    self.navigationController.navigationBar.titleTextAttributes = dic;
//    [self setTextField];
//    [self showNextlabel];
}
- (void)setTextField{
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 250, 280, 40)];
   // textField.backgroundColor = [UIColor blueColor];
    //设置tag
    textField.tag = 100;
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.placeholder = @"请输入内容让下一个界面显示";
    [self.view addSubview:textField];
    [textField release];
}
- (void)showNextlabel{
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 310, 280, 40)];
    label.tag = 200;
    label.backgroundColor = [UIColor blueColor];
    label.text = @"显示下一个文本内容";
    [self.view addSubview:label];
    [label release];
}
//单独定制导航条
- (void)customizationNavigationBarContent{
    //1.配置导航条显示的文字
    self.navigationItem.title = @"第一个界面";
    //2.配置导航条的titleView
    UISegmentedControl *segmentCont = [[UISegmentedControl alloc] initWithItems:@[@"消息",@"通话"]];

    self.navigationItem.titleView = segmentCont;

    [segmentCont release];
    //左侧部分
    //3.配置Left
    UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:self action:@selector(handleLeftBarButtonAction:)];
    self.navigationItem.leftBarButtonItem = leftBarButtonItem;

    [leftBarButtonItem release];
    //配置右侧部分
    UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(handleRightBarButtonAction:)];
    self.navigationItem.rightBarButtonItem = rightBarButtonItem;
    [rightBarButtonItem release];
}

#pragma mark - handle left bar button action
- (void)handleLeftBarButtonAction:(UIBarButtonItem *)barItem
{
    NSLog(@"点击了左侧!");
}
- (void)handleRightBarButtonAction:(UIBarButtonItem *)barItem
{
    NSLog(@"点击了右侧!");
}
//配置导航条,配置完成之后所有界面的导航条效果一样
- (void)configureNavigationBarCommonPropety{
    //1.修改导航条的颜色
    self.navigationController.navigationBar.backgroundColor = [UIColor grayColor];
    //2.修改导航条的渲染颜色
    self.navigationController.navigationBar.tintColor = [UIColor orangeColor];
    //3.关闭导航条的毛玻璃效果
    //self.navigationController.navigationBar.translucent = YES;
    //当关闭导航条毛玻璃效果之后,导航控制器的contentView向下偏移64

    //4.影藏导航条
    self.navigationController.navigationBar.hidden = NO;
    //5.设置导航图片
    /**
     *  图片尺寸小于44 或者大于44小于64,图片平铺显示到状态条和导航条
     当图片尺寸等于44时,图片只会显示在导航条
     当图片尺寸等于64时,图片会显示在状态和导航条上
     */
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"32030.png"] forBarMetrics:UIBarMetricsDefault];
}

- (void)setupButton{
    UIButton *btnName =[UIButton buttonWithType:UIButtonTypeSystem];
    btnName.frame = CGRectMake(20, 100, 280, 40);
    [btnName setTitle:@"进入下一界面" forState:UIControlStateNormal];
    btnName.backgroundColor = [UIColor orangeColor];
    [btnName addTarget:self action:@selector(handlePushBtn:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnName];
}

- (void)handlePushBtn:(UIButton *)button
{
    //属性传值从前往后传
    /*
    //1.创建第二个视图控制器对象
    SecondViewController *secondVC = [[SecondViewController alloc] init];
    //2.通过导航控制器push到下一个界面(视图控制器自带的 navigationContrller 属性能够获取到当前视图控制器的导航控制器,然后,通过导航控制器进行push)
    //第二个界面接收数据
    secondVC.data = [(UITextField *)[self.view viewWithTag:100] text];

    [self.navigationController pushViewController:secondVC animated:YES];
    //3.释放
    [secondVC release];
    */

//    //代理传值,从后往前传
//
//    //1.创建第二个视图控制器对象
//    SecondViewController *secondVC = [[SecondViewController alloc] init];
//
//    //代理传值  第三步,给后一个界面,指定代理对象
//    secondVC.delegate = self;
//
//    //2.通过导航控制器push到下一个界面(视图控制器自带的 navigationContrller 属性能够获取到当前视图控制器的导航控制器,然后,通过导航控制器进行push)
//
//    [self.navigationController pushViewController:secondVC animated:YES];
//    //3.释放
//    [secondVC release];

    //单例传值

    //1.创建第二个视图控制器对象
    SecondViewController *secondVC = [[SecondViewController alloc] init];
    //单例传值第三步
    [Singleton mianSingleton].textFieldData = [(UITextField *)[self.view viewWithTag:100] text];
    //2.通过导航控制器push到下一个界面(视图控制器自带的 navigationContrller 属性能够获取到当前视图控制器的导航控制器,然后,通过导航控制器进行push)

    [self.navigationController pushViewController:secondVC animated:YES];
    //3.释放
    [secondVC release];

}

@end

SecondViewController.h中设置代理

#import <UIKit/UIKit.h>

//代理传值第一步:定义协议
@protocol SecondViewControllerdelegate <NSObject>

- (void)passValue:(NSString *)data;

@end

@interface SecondViewController : UIViewController
//属性传值第一步:后一个界面定义属性
@property (nonatomic, copy)NSString *data;
//代理传值 第二步:定义代理属性,存储代理
@property (nonatomic, assign) id<SecondViewControllerdelegate>delegate;
@end

SecondViewController.m

#import "SecondViewController.h"
#import "ThirdViewController.h"
//延展
@interface SecondViewController ()

@end

@implementation SecondViewController

/**
 * 界面切换时,视图的变换过程
 1.从前一个进入到下一个界面
 A push B, 此时 方法的处罚顺序 A - viewWillDisappear ,B - viewWillAppear A- viewDidDisappear, B - viewDidAppear
 2.从后一个界面返回到前一个界面
 B pop A 此时的f方法触发顺序为B - viewWillDisappear ,A - viewWillAppear B- viewDidDisappear, A - viewDidAppear
 */
/*
- (void)viewWillAppear:(BOOL)animated
{

    [super viewWillAppear:animated];
    NSLog(@"%s, %d", __FUNCTION__, __LINE__);
}
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    NSLog(@"%s, %d", __FUNCTION__, __LINE__);
}
- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    NSLog(@"%s, %d", __FUNCTION__, __LINE__);
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    NSLog(@"%s, %d", __FUNCTION__, __LINE__);
}
*/

/**
 *  界面间传值之二:从后往前传值
 辟邪简谱:代理传值 (代理事前一个界面,协议在后一个界面写)
 后一个界面是委托方,前一个界面是被委托方.
 招式一:在后一个界面定义协议(定义一个用于传值的方法,而且方法必须要有参数,参数必须要与所传数据的类型保持一致)
 招式二:在后一个界面定义代理属性,用来保存代理对象.
 招式三:设置后一个界面的代理 ---- 在前一个界面,进入后一个界面之前,设置前一个界面为后一个代理.
 招式四:前一个界面服从协议
 招式五:前一个界面实现协议中的方法.
 招式六:后一个界面让代理执行协议中的方法(执行方法是,把传输的数据作为方法的参数进行参数进行传递),时机:返回上一界面之前
 */

- (void)viewDidLoad {
     NSLog(@"%s, %d", __FUNCTION__, __LINE__);
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor yellowColor];
    [self setupButton];
    [self returnupButton];
    [self customizationNavigationBarContent];
    [self setTextField];
    [self showNextlabel];
}

- (void)setTextField{
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 250, 280, 40)];
    textField.backgroundColor = [UIColor blueColor];
    textField.tag = 200;
    textField.placeholder = @"请输入内容让下一个界面显示";
    [self.view addSubview:textField];
    [textField release];
}
- (void)showNextlabel{
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 310, 280, 40)];
    label.backgroundColor = [UIColor blueColor];
    label.text = self.data;
    [self.view addSubview:label];
    [label release];
}

- (void)customizationNavigationBarContent{
    //1.配置导航条显示的文字
    self.navigationItem.title = @"第二个界面";
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)setupButton{
    UIButton *btnName = [UIButton buttonWithType:UIButtonTypeSystem];
    btnName.frame = CGRectMake(20, 100, 280, 40);
    [btnName setTitle:@"进入下一界面" forState:UIControlStateNormal];
    btnName.backgroundColor = [UIColor orangeColor];
    [btnName addTarget:self action:@selector(handlePushBtn:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnName];
}
- (void)returnupButton{
    UIButton *btnName = [UIButton buttonWithType:UIButtonTypeSystem];
    btnName.frame = CGRectMake(20, 200, 280, 40);
    [btnName setTitle:@"返回一界面" forState:UIControlStateNormal];
    btnName.backgroundColor = [UIColor orangeColor];
    [btnName addTarget:self action:@selector(handlePopBtn:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnName];
}
- (void)handlePushBtn:(UIButton *)button
{
    //1.创建第二个视图控制器对象
    ThirdViewController *thirdVC = [[ThirdViewController alloc] init];
    //2.通过导航控制器push到下一个界面(视图控制器自带的 navigationContrller 属性能够获取到当前视图控制器的导航控制器,然后,通过导航控制器进行push)
    [self.navigationController pushViewController:thirdVC animated:YES];
    //3.释放
    [thirdVC release];

}
//返回上一界面
- (void)handlePopBtn:(UIButton *)button
{
    //代理传值第六步:让代理执行任务
    //安全处理,判段代理是否实现了方法,防止崩溃
    if ([self.delegate respondsToSelector:@selector(passValue:)]) {
        [self.delegate passValue:[(UITextField *)[self.view viewWithTag:200] text]];
    }
    [self.navigationController popViewControllerAnimated:YES];

}
-(void)dealloc
{
    [_data release];
    [super dealloc];
}
@end

Singleton.h 单例传值

#import <Foundation/Foundation.h>
/**
 *界面间传值之三:多个界面之间传值
 九阴真经:单例传值
 招式1:定义单例类,提供创建单例对象的+号方法.
 2.在单例类中定义属性,存储要传递的数据.(属性数据类型要与传递的数据的类型一致)
 3.在进入下一个界面之前,将数据让单例对象保存
 4.在其他界面中直接从单例中获取数据即可.
 */
@interface Singleton : NSObject
//创建+号方法,提供创建单例对象的方法 (单例命名规范,以main,share,standard,default开头)
//单例类的优势:(1)节省空间 2.共享内存单元

+ (Singleton *)mianSingleton;
@property (nonatomic, copy)NSString *textFieldData;
@end

Singleton.m

@implementation Singleton
//单例的空间在整个程序运行期间都不会回收,会存在内存泄露问题,它的存在是为了解决待定问题
+ (Singleton *)mianSingleton{
    //静态变量
    static Singleton *single = nil;
    if (!single) {
        single = [[Singleton alloc] init];
    }
    return single;

}
@end
时间: 2024-10-04 23:44:48

iOS中的导航条(UISegmentedControl)的基本使用(界面中传值的3中方法)的相关文章

iphone ios 屏幕,导航条,状态栏的高度

1.app尺寸,去掉状态栏 CGRect r = [ UIScreen mainScreen ].applicationFrame; r=0,20,320,460 2.屏幕尺寸 CGRect rx = [ UIScreen mainScreen ].bounds; r=0,0,320,480 3.状态栏尺寸 CGRect rect; rect = [[UIApplication sharedApplication] statusBarFrame]; 当有导航条的时候,导航条的高度是44,那么整个

iOS viewController添加导航条以及返回跳转选择

给单独的viewcontroller或者在Appdelegate的主页面添加导航条,只要在viewcontroller上添加navigationcontroller,在添加此navigationcontroller即可 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow allo

iphone中UINavigationBar(导航条视图)的介绍

多视图应用程序中,我们常常使用到自定义UINavigationBar来完成导航条的设置. 1.创建一个导航条 UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; 2.有了导航条以后,必须在导航条上设置一个item集合,用来放置中间的标题,和左右的按钮,因为上面空间有限,只有左右两个按钮. //创建一个导航条集合 UINavigationItem *n

Bootstrap 组件中的导航条

先查看效果: 该导航条可以适应不同尺寸的页面(如手机屏幕.电脑屏幕)   实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewpor

android开发(1):底部导航条的实现 | navigation tab | activity的创建

底部导航条,在iOS中叫tabbar,在android中叫bottombar或bottom navigation,是一个常用的切换页面的导航条. 同样,如果有良好的第三方库,我们应该优先考虑,能用好别人的东西,已经很厉害. github上的roughike/BottomBar,曾经是热度较高的库,但是已经过时了,没有再维护,加到项目也会遇到编译的问题,所以这里不使用,这里使用的是PagerBottomTabStrip,地址是:https://github.com/tyzlmjj/PagerBot

android开发(1):底部导航条的实现 | navigation tab

底部导航条,在iOS中叫tabbar,在android中叫bottombar或bottom navigation,是一个常用的切换页面的导航条. 同样,如果有良好的第三方库,我们应该优先考虑,能用好别人的东西,已经很厉害. github上的roughike/BottomBar,曾经是热度较高的库,但是已经过时了,没有再维护,加到项目也会遇到编译的问题,所以这里不使用,这里使用的是PagerBottomTabStrip,地址是:https://github.com/tyzlmjj/PagerBot

Bootstrap导航条

前面的话 导航条(navbar)和导航(nav),就相差一个字,多了一个“条”字.其实在Bootstrap框架中他们还是明显的区别.在导航条(navbar)中有一个背景色.而且导航条可以是纯链接(类似导航),也可以是表单,还有就是表单和导航一起结合等多种形式.本文将详细介绍Bootstrap导航条 基础导航条 在Bootstrap框架中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多. 导航条是在应用或网站中作为导航页头的响应式基础组件.它们在移动设备上可以折叠(并且可开

Bootstarp学习(十一)导航条

导航条基础 导航条(navbar)和上一节介绍的导航(nav),就相差一个字,多了一个"条"字.其实在Bootstrap框架中他们还是明显的区别.在导航条(navbar)中有一个背景色.而且导航条可以是纯链接(类似导航),也可以是表单,还有就是表单和导航一起结合等多种形式.在这一节中将一起探讨Bootstrap框架中导航条的使用. 导航条和导航一样,在Bootstrap框架中是一个独立组件,所以你也可以根据自己的需求使用不同的版本: LESS版本:对应的源文件navbar.less S

【Discuz】导航条、搜索栏的修改

可能对于有些人来说,Discuz的导航栏与搜索栏需要修改.或者直接不要. 这里以默认的模板为例,进行说明. Discuz的导航条.搜索栏也是如同<[Discuz]去除版权信息,标题栏与底部修改>(点击打开链接)的信息一样,只要修改部分文件就能够应用于整个站点. 在修改代码之前,先明确几个可以直接在后台修改的东西: 1.首先是"热搜"的关键词,直接在全局->搜索设置->热门关键词中,可以直接改. 2.同时,搜索的下拉列表,文章.帖子.用户,可以在开启搜索中的搜索项