您的位置:首页 > 移动开发 > IOS开发

IOS基础学习笔记四:控制器切换、赋值

2015-05-15 15:05 555 查看

一、Modal

Modal方式一:代码

1.打开模态控制器
[self presentViewController:login animated:YES completion:^{NSLog(@"弹出完毕");}];
2.关闭模态控制器
[self dismissViewControllerAnimated:YES completion:nil];
Modal方式二:storyboard

在storyboard中托出两个ViewController:ViewController 和 NextViewController


按住CTRL 点击ViewController 中的button 指向 NextViewController,在弹出中选择Modal






------------、控制器之间传值----------------

传值方式一:直接复杂,缺点 耦合性太高

例子说明:在Modal,取呈现的控制器(presentingViewController)对象直接赋值

- (IBAction)loginToMain:(id)sender {
// 1.取出用户名,并传回上一个控制器
NSString *text = self.username.text;
ViewController *back =(ViewController *)self.presentingViewController;
back.userName.text=text;
//[self.delegate loginSuccess:text];

// 2.关闭当前控制器
[self dismissViewControllerAnimated:YES completion:nil];
}


传值方式二: 代理 说明:ViewController作为代理,LoginViewController中定义代理

步骤一:LoginViewController.h中定义协议
@protocol LoginViewControllerDelegate;

@interface LoginViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *username;
- (IBAction)back:(id)sender;
- (IBAction)loginToMain:(id)sender;

// 代理用weak
@property (nonatomic, weak) id<LoginViewControllerDelegate> delegate;
@end

@protocol LoginViewControllerDelegate <NSObject>
- (void)loginSuccess:(NSString *)usernameText;
@end


并且 LoginViewController.m 登录IBAction 用到 [self.delegateloginSuccess:text];

步骤二:ViewController.h继承协议

@protocol LoginViewControllerDelegate;
@interface ViewController : UIViewController<LoginViewControllerDelegate>
@end


步骤三:ViewController.m chu 绑定代理,并实现接受消息方法loginSucess

// 初始化控制器
LoginViewController *login = [[LoginViewController alloc] init];
login.delegate = self;
// 弹出登录界面
[self presentViewController:login animated:YES completion:^{
NSLog(@"弹出完毕");
}];


#pragma mark LoginViewControllerDelegate方法
- (void)loginSuccess:(NSString *)usernameText
{
//    NSLog(@"%@",usernameText);
self.userName.text=usernameText;
}
步骤四:LoginViewController.m 触发代理方法

[self.delegateloginSuccess:text];

二、push 用到导航控制器UINavigationController 类似 棧

方式一 代码:

MJAppDelegate.m中 创建导航控制器,并设置MJViewController为第一个控制器

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[MJViewController alloc] initWithNibName:@"MJViewController" bundle:nil];

// 创建导航控制器(并且设置MJViewController是第一个子控制器)
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:self.viewController];
//NSLog(@"nav=%@", nav);
self.window.rootViewController = nav;

[self.window makeKeyAndVisible];
return YES;
}

导航控制器掌握:
1.创建导航控制器
[[UINavigationController alloc] initWithRootViewController:self.viewController];
2.栈(栈中所有的子控制器)
self.navigationController.viewControllers;
3.将控制器压入栈中
[self.navigationController pushViewController:second animated:YES];
4.将控制器从栈中弹出
1> 将栈顶控制器弹出
[self.navigationController popViewControllerAnimated:YES];
2> 回到栈底控制器(根控制器)
[self.navigationController popToRootViewControllerAnimated:YES];
3> 回到具体某一个控制器
[self.navigationController popToViewController:<#(UIViewController *)#> animated:<#(BOOL)#>];
5.导航栏显示的内容
1> 栈顶控制器的navigationItem属性决定了导航栏上面显示的东西
2> 导航栏左边的返回键,是由上一个控制器决定
6.栈顶控制器
self.navigationController.topViewController
// 栈顶控制器的navigationItem属性决定了导航栏上面显示的东西
// 导航栏左边的返回键,是由上一个控制器决定
self.navigationItem.title = @"MJViewController";
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:nil action:nil];

// 设置下一个界面的返回按钮
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:nil action:nil];


方式二 :storyboard

// 跳到下一个控制器 (执行对应的线):VIew 对 View拖,push的线;“ogin_success”对于线的identifier
[selfperformSegueWithIdentifier:@"login_success"sender:nil];

在执行segue之前会调用一个方法

#pragma mark  执行segue之前会先调用一下这个方法
// 可以给下一个控制器传递数据
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
//segue.sourceViewController; // 来源控制器

//segue.destinationViewController; // 目的控制器

NSLog(@"%@", segue.sourceViewController);
NSLog(@"%@", segue.destinationViewController);
}


二、UITabBarController

1.UITabbarController的所有子控制器:viewControllers
2.UITabbarController可以设置delegate,监听切换过程
3.每个标签显示的内容由当前子控制器的tabbarItem属性决定
self.tabBarItem.title = @"MJView"; // 文字
self.tabBarItem.badgeValue = @"5"; // 红色数字
self.tabBarItem.image // 图片
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: