一.UINavigationController
// 创建一个导航控制器
// 创建一个控制器作为根控制器 去管理
RootViewController *rootVC = [[ RootViewController alloc ] init ];
UINavigationController *navC = [[ UINavigationController alloc ] initWithRootViewController :rootVC];
[rootVC release ];
// 把导航控制器作为 window 的根控制器
self . window . rootViewController = navC;
[navC release];
- (
void
)viewDidLoad {
[ super viewDidLoad ];
self . view . backgroundColor = [ UIColor greenColor ];
// 创建一个按钮 进入下一个页面
UIButton *button = [ UIButton buttonWithType :( UIButtonTypeCustom )];
button. frame = CGRectMake ( 100 , 100 , 100 , 100 );
[ self . view addSubview :button];
button. backgroundColor = [ UIColor redColor ];
[button setTitle : @"2" forState :( UIControlStateNormal )];
[button release ];
// 添加方法 进入下一个界面
[button addTarget : self action : @selector (actionButton:) forControlEvents :( UIControlEventTouchDragInside )];
[ super viewDidLoad ];
self . view . backgroundColor = [ UIColor greenColor ];
// 创建一个按钮 进入下一个页面
UIButton *button = [ UIButton buttonWithType :( UIButtonTypeCustom )];
button. frame = CGRectMake ( 100 , 100 , 100 , 100 );
[ self . view addSubview :button];
button. backgroundColor = [ UIColor redColor ];
[button setTitle : @"2" forState :( UIControlStateNormal )];
[button release ];
// 添加方法 进入下一个界面
[button addTarget : self action : @selector (actionButton:) forControlEvents :( UIControlEventTouchDragInside )];
//
实现
Button
的方法
进入下一个界面
- ( void )actionButton:( UIButton *)button
{
// 创建下一个界面的
SecondViewController *secondVC = [[ SecondViewController alloc ] init ];
// ViewControllers 是导航控制器管理的那一组控制器 所有被管理的控制器们都存放在这个数组中
// NSLog(@"%@", self.navigationController.viewControllers);
// 跳转去下一个页面 push
[ self . navigationController pushViewController :secondVC animated : YES ];
[secondVC release ];
// NSLog(@"%@", self.navigationController.viewControllers);
// 栈顶的控制器
// 正显示的控制器
NSLog ( @" 栈顶 %@" , self . navigationController . topViewController );
- ( void )actionButton:( UIButton *)button
{
// 创建下一个界面的
SecondViewController *secondVC = [[ SecondViewController alloc ] init ];
// ViewControllers 是导航控制器管理的那一组控制器 所有被管理的控制器们都存放在这个数组中
// NSLog(@"%@", self.navigationController.viewControllers);
// 跳转去下一个页面 push
[ self . navigationController pushViewController :secondVC animated : YES ];
[secondVC release ];
// NSLog(@"%@", self.navigationController.viewControllers);
// 栈顶的控制器
// 正显示的控制器
NSLog ( @" 栈顶 %@" , self . navigationController . topViewController );
}
//
返回上一个界面
[ self . navigationController popViewControllerAnimated : YES ];
}
- ( void )actionSecondButton:( UIButton *)button
{
// 返回根界面
[ self . navigationController popToRootViewControllerAnimated : YES ];
}
- ( void )actionThirdButton:( UIButton *)button
{
// 返回到指定界面
// 需要从被管理的数组中 把要返回的取出来
NSArray *viewControllers = self . navigationController . viewControllers ;
SecondViewController *sec = viewControllers[ 1 ];
[ self . navigationController popToViewController :sec animated : YES ];
// 或者下面的
[ self . navigationController popViewControllerAnimated : YES ];
}
- ( void )actionSecondButton:( UIButton *)button
{
// 返回根界面
[ self . navigationController popToRootViewControllerAnimated : YES ];
}
- ( void )actionThirdButton:( UIButton *)button
{
// 返回到指定界面
// 需要从被管理的数组中 把要返回的取出来
NSArray *viewControllers = self . navigationController . viewControllers ;
SecondViewController *sec = viewControllers[ 1 ];
[ self . navigationController popToViewController :sec animated : YES ];
// 或者下面的
//[self.navigationController popToViewController:self.navigationController.viewControllers[1] animated:YES];
状态栏高 20
bar 高 44
*/
self . view . backgroundColor = [ UIColor redColor ];
self . navigationItem . title = @" 首页 " ;
// 创建一个 UIView 出来给 titleView 有了 View 想往上面加什么都随意
//UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 50, 44)];
// view.backgroundColor = [UIColor whiteColor];
//self.navigationItem.titleView = view;
// 用系统样式初始化一个 UIBarButtonItem
UIBarButtonItem *leftButton = [[ UIBarButtonItem alloc ] initWithBarButtonSystemItem : UIBarButtonSystemItemCamera target : self action : @selector (actionLeftBarButtonItem:)];
self . navigationItem . leftBarButtonItem = leftButton;
[leftButton release ];
// 用标题的初始化方法 初始化右面的按钮
UIBarButtonItem *rightBarButton = [[ UIBarButtonItem alloc ] initWithTitle : @" 确 定 " style :( UIBarButtonItemStylePlain ) target : self action : @selector (actionRightBarButtonItem:)];
self . navigationItem . rightBarButtonItem = rightBarButton;
// 用图片初始化 UIBarButtonItem
UIBarButtonItem *imageBarButton = [[ UIBarButtonItem alloc ] initWithImage :[ UIImage imageNamed : @"left" ] style :( UIBarButtonItemStylePlain ) target : self action : @selector (actionImageBarButton:)];
self . navigationItem . rightBarButtonItem = imageBarButton;
[imageBarButton release ];
// 设置一下 Bar 的颜色及图片
// [self.navigationController.navigationBar setBarTintColor:[UIColor grayColor]];
// 高 44 的把 导航条遮住了 , 漏出了状态栏
// 高 64 的把 导航栏和状态栏都充满
// [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"32064"] forBarMetrics:(UIBarMetricsDefault)];
// 重要的属性
// 从 7.0 以后 导航条默认是半透明的 如果半透明 从屏幕左上角开始计算 frame
// 如果设置成不透明的 从导航条的底部开始计算 frame
// 透明度的设置
self . navigationController . navigationBar . translucent = NO ;
//
// Do any additional setup after loading the view.
}
- ( void )actionLeftBarButtonItem:( UIBarButtonItem *)barButtonItem
{
NSLog ( @" 启动照相机 " );
}
- ( void )actionRightBarButtonItem:( UIBarButtonItem *)barButtonItem
{
NSLog ( @" 我是右面的 ooo" );
}
- ( void )actionImageBarButton:( UIBarButtonItem *)barButtonItem
{
NSLog(@"图片的按钮 ");
二.界面传值
属性传值
*
从前往后
(
根
到
顶
)
是用属性传值
1. 点击跳转方法的时候传值
2. 要传递的是什么 ? 传递的是数据不是控件
1. 点击跳转方法的时候传值
2. 要传递的是什么 ? 传递的是数据不是控件
*/
}
//
要拿到要传递的数据
UITextField *textField = ( UITextField *)[ self . view viewWithTag : 888 ];
NSString *string = textField. text ;
// 要有一个属性来接收这个数据
SecondViewController *second = [[ SecondViewController alloc ] init ];
UITextField *textField = ( UITextField *)[ self . view viewWithTag : 888 ];
NSString *string = textField. text ;
// 要有一个属性来接收这个数据
SecondViewController *second = [[ SecondViewController alloc ] init ];
second.string = string;
代理传值
*
从后往前
(
顶
到
根
)
用代理传值
1. 协议从哪儿写? 后面的界面写
@protocol
SecondDelegate <
NSObject
>
- ( void )changeTextFieldString:( NSString *)string;
@end
@interface SecondViewController : UIViewController
@property ( nonatomic , retain ) NSString *string;
- ( void )changeTextFieldString:( NSString *)string;
@end
@interface SecondViewController : UIViewController
@property ( nonatomic , retain ) NSString *string;
@end
2.
协议中要有的方法
传值用
方法中的参数就是咱们要传得值
3.
顶搞一个代理的属性出来
设置代理
来使用
@property
(
nonatomic
,
retain
)
id
<
SecondDelegate
> delegate;
4.
根遵守协议
然后
根设置代理
根实现方法
@interface
RootViewController :
UIViewController
<
SecondDelegate
>
- (
void
)changeTextFieldString:(
NSString
*)string
{
SecondViewController *second = [[ SecondViewController alloc ] init ];
// 设置代理
UITextField *textField = ( UITextField *)[ self . view viewWithTag : 888 ];
textField. text = string;
{
SecondViewController *second = [[ SecondViewController alloc ] init ];
// 设置代理
UITextField *textField = ( UITextField *)[ self . view viewWithTag : 888 ];
textField. text = string;
}
- (
void
)actionButton:(
UIButton
*)button
{
// 要拿到要传递的数据
UITextField *textField = ( UITextField *)[ self . view viewWithTag : 888 ];
NSString *string = textField. text ;
// 要有一个属性来接收这个数据
SecondViewController *second = [[ SecondViewController alloc ] init ];
second. string = string;
// 设置代理
second. delegate = self ;
[ self . navigationController pushViewController :second animated : YES ];
// 要拿到要传递的数据
UITextField *textField = ( UITextField *)[ self . view viewWithTag : 888 ];
NSString *string = textField. text ;
// 要有一个属性来接收这个数据
SecondViewController *second = [[ SecondViewController alloc ] init ];
second. string = string;
// 设置代理
second. delegate = self ;
[ self . navigationController pushViewController :second animated : YES ];
}
5.
回到后一个界面
顶让代理调用方法进行传值
- (
void
)actionButton:(
UIButton
*)button
{
UITextField *textField = ( UITextField *)[ self . view viewWithTag : 999 ];
[ _delegate changeTextFieldString :textField. text ];
[ self . navigationController popToRootViewControllerAnimated : YES ];
{
UITextField *textField = ( UITextField *)[ self . view viewWithTag : 999 ];
[ _delegate changeTextFieldString :textField. text ];
[ self . navigationController popToRootViewControllerAnimated : YES ];
}
6.
根拿到传过来的参数进行赋值
*/
三. NSTIMER
//NSTimer
//
创建一个定时器
定时循环执行某一个方法
(NSTimeInterval)
时间的间隔
如下
1.0
就是每
1.0
秒执行一次方法
userInfo
可以当成一个参数
也可以标识这个定时器是干什么的
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timer:) userInfo:@"haha" repeats:YES];
//
激活定时器
相当于启动
[timer fire];
//
停止
[timer invalidate];
四.NSUserDefaults
// NSUserDefaults
最轻量级的持久化
// 一般只用这个来存储 例如 : 账号 / 密码 / 设备 ID... ...
// 单例 , 目前就叫初始化一个对象就行
NSUserDefaults *userDefaults = [ NSUserDefaults standardUserDefaults ];
// 保存
[userDefaults setObject : @" 尚亚雷 " forKey : @"shang" ];
// 同步数据
[userDefaults synchronize ];
// 打印沙盒路径
NSLog ( @"%@" , NSHomeDirectory ());
/*
/Users/lanou3g/Library/Developer/CoreSimulator/Devices/F4C0035C-BFC9-4B9A-95D1-59CE94B63E35/data/Containers/Data/Application/1F290708-5666-45D8-9222-AFAD1EC03E16
*/
/*
// 取出沙盒里面保存的数据
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *string = [userDefaults objectForKey:@"shang"];
NSLog(@"%@", string);
// 一般只用这个来存储 例如 : 账号 / 密码 / 设备 ID... ...
// 单例 , 目前就叫初始化一个对象就行
NSUserDefaults *userDefaults = [ NSUserDefaults standardUserDefaults ];
// 保存
[userDefaults setObject : @" 尚亚雷 " forKey : @"shang" ];
// 同步数据
[userDefaults synchronize ];
// 打印沙盒路径
NSLog ( @"%@" , NSHomeDirectory ());
/*
/Users/lanou3g/Library/Developer/CoreSimulator/Devices/F4C0035C-BFC9-4B9A-95D1-59CE94B63E35/data/Containers/Data/Application/1F290708-5666-45D8-9222-AFAD1EC03E16
*/
/*
// 取出沙盒里面保存的数据
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *string = [userDefaults objectForKey:@"shang"];
NSLog(@"%@", string);
*/
//
取出沙盒里面保存的数据
NSUserDefaults *userDefaults = [ NSUserDefaults standardUserDefaults ];
NSString *string = [userDefaults objectForKey : @"shang" ];
NSUserDefaults *userDefaults = [ NSUserDefaults standardUserDefaults ];
NSString *string = [userDefaults objectForKey : @"shang" ];
NSLog(@"%@", string);