最后效果图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

main.storyboard

BeyondViewController.h

//
// BeyondViewController.h
// 16_控制器切换方式1_Modal_通过代码方式
//
// Created by beyond on 14-7-30.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// #import <UIKit/UIKit.h> @interface BeyondViewController : UIViewController
// 提示欢迎谁谁谁
@property (weak, nonatomic) IBOutlet UILabel *welcomeLabel;
@property (weak, nonatomic) IBOutlet UIButton *wantLoginBtn;
@property (weak, nonatomic) IBOutlet UIButton *wantLogoutBtn; // 点击BeyondViewController界面上的登录button,切换到BeyondLoginViewController.h进行输入password帐号登录
- (IBAction)wantLogin:(UIButton *)sender;
- (IBAction)wantLogout:(UIButton *)sender; @end

BeyondViewController.m

//
// BeyondViewController.m
// 16_控制器切换方式1_Modal_通过代码方式
//
// Created by beyond on 14-7-30.
// Copyright (c) 2014年 com.beyond. All rights reserved. /*
控制器切换的3种方式:
1,modal (模态对话框,新的控制器从底部往上展开,遮住后面的控制器)(很多其它能够參看 罗云彬的<琢石成器—Windows环境下32位汇编语言程序设计>第5.4章 对话框)
通过代码实现切换
通过storyboard实现切换 2,push 通过UINavigationController管理的栈实现
从右往左边展开,弹出新的控制器(处于栈顶),
涉及内容主要有:
參数的传递
导航栏的标题定制
跳转前的验证,典型如登录跳转前的client校验 3,UITabbarController
以平行的方式是管理子视图控制器 4,自己定义容器,相似抽屉效果(右滑,弹出左側边栏) */ #import "BeyondViewController.h"
#import "BeyondLoginViewController.h"
@interface BeyondViewController ()<BeyondLoginViewControllerDelegate,UIActionSheetDelegate> @end @implementation BeyondViewController - (void)viewDidLoad
{
[super viewDidLoad]; } // 点击BeyondViewController界面上的登录按钮,切换到BeyondLoginViewController.h进行输入password帐号登录
- (IBAction)wantLogin:(UIButton *)sender {
// 想通过代码以Modal的方式,切换到BeyondLoginViewController控制器,就必须创建实例对象,耦合性太强~
BeyondLoginViewController *loginViewCtrl = [[BeyondLoginViewController alloc]init];
// 设置loginViewCtrl的代理 为当前控制器,由于,在下一个控制器(loginViewCtrl)中,用户输入完用户名和password之后,会调用代理 的doSomethingWithUsername方法,给它的代理对象(即当前控制器)发消息,參数 就是要传递过来的用户名~
loginViewCtrl.delegate = self;
// 关键,代码,全部控制器都有该方法,展现
[self presentViewController:loginViewCtrl animated:YES completion:^{
NSLog(@"BeyondLogin控制器--出现了");
}];
} // 实现下一个控制器中代理方法,由于在下一个控制器(loginViewCtrl)中,用户输入完用户名和password之后,会调用代理 的doSomethingWithUsername方法,给它的代理对象(即当前控制器)发消息,參数 就是要传递过来的用户名~
- (void)doSomethingWithLoginName:(NSString *)username
{
username = [NSString stringWithFormat:@"欢迎回来:%@",username];
_welcomeLabel.text = username; // 禁用登录按钮
_wantLoginBtn.enabled = NO;
_wantLogoutBtn.enabled = YES;
} - (IBAction)wantLogout:(UIButton *)sender
{
UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@"确定注销吗?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"确定" otherButtonTitles:nil, nil];
[actionSheet showInView:self.view];
} #pragma mark - actionSheet的代理 方法
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSLog(@"按钮索引:%d",buttonIndex);
// 确定注销 索引是 0
if (buttonIndex == 0) {
// 注销
_wantLoginBtn.enabled = YES;
_wantLogoutBtn.enabled = NO;
_welcomeLabel.text = @"";
}
// 取消 索引是 1 doNothing }
@end

协议

BeyondLoginViewControllerDelegate.h

//
// BeyondLoginViewControllerDelegate.h
// 16_控制器切换方式1_Modal
//
// Created by beyond on 14-7-30.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// #import <Foundation/Foundation.h> @protocol BeyondLoginViewControllerDelegate <NSObject> - (void) doSomethingWithLoginName:(NSString *)username;
@end

BeyondLoginViewController.xib

BeyondLoginViewController.h

//
// BeyondLoginViewController.h
// 16_控制器切换方式1_Modal
//
// Created by beyond on 14-7-30.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// #import <UIKit/UIKit.h>
#import "BeyondLoginViewControllerDelegate.h" @interface BeyondLoginViewController : UIViewController // id类型的代理 (weak弱引用),调用代理 的方法,将本控制器中用户输入的姓名,通过參数传递给 代理 ,供其使用
@property (nonatomic,weak) id <BeyondLoginViewControllerDelegate> delegate; @property (weak, nonatomic) IBOutlet UITextField *username;
@property (weak, nonatomic) IBOutlet UITextField *password; // 向server提交username与password
- (IBAction)submit:(UIButton *)sender; // 点击返回button,返回到前一个控制器
- (IBAction)backToHome:(UIBarButtonItem *)sender; @end

BeyondLoginViewController.m

//
// BeyondLoginViewController.m
// 16_控制器切换方式1_Modal
//
// Created by beyond on 14-7-30.
// Copyright (c) 2014年 com.beyond. All rights reserved.
// #import "BeyondLoginViewController.h"
#import "BeyondViewController.h"
#import "BeyondLoginViewControllerDelegate.h"
@interface BeyondLoginViewController () @end @implementation BeyondLoginViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
} - (void)viewDidLoad
{
[super viewDidLoad];
// 设置password框 为星号
_password.secureTextEntry = YES;
} // 点击返回button,返回到前一个控制器
- (IBAction)backToHome:(UIBarButtonItem *)sender
{
// 关键代码,关闭自身这个modal模态对话框
[self dismissViewControllerAnimated:YES completion:^{
NSLog(@"BeyondLogin控制器,消失了");
}];
} // 向server提交用户名和password
- (IBAction)submit:(UIButton *)sender {
// 如同 JS 表单验证
if (_username.text.length == 0 || _password.text.length == 0) {
// <#(id<UIActionSheetDelegate>)#>
UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@"请输入用户名和password" delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:@"红色警告" otherButtonTitles:@"其它button", nil];
// 如同toast,手动显示
[actionSheet showInView:self.view]; // 直接返回
return;
} // 传递数据 给上一个控制器
/*
// 方式1,耦合性太强,直接得到弹出自己的那一个(上一个)控制器
BeyondViewController *preVC = (BeyondViewController *)self.presentingViewController;
// 这样就能够设置上一个控制 器的Label了
preVC.welcomeLabel.text = _username.text;
[self dismissViewControllerAnimated:YES completion:nil];
*/ // 方式2,使用代理 ,调用代理 的方法,并将当前控制器的输入的用户名,作为參数,传递给代理的这种方法里,供代理去使用
[self.delegate doSomethingWithLoginName:_username.text];
[self dismissViewControllerAnimated:YES completion:nil];
}
@end

Modal模态对话框--------通过storyboard方式实现

版权声明:本文博客原创文章,博客,未经同意,不得转载。

iOS_16_开关控制器_modal_代码方法的更多相关文章

  1. Thinkphp--------为什么Thinkphp会默认进入Index控制器的index方法

    最近遇到两个刚学PHP的童鞋,都问到了同一个问题,就是他们没有做什么配置,为什么访问入口文件index.php的时候会自动跳转到IndexController里面的index方法.他们想知道具体怎么回 ...

  2. .NET CORE控制器里的方法取传参的坑

    把以前的ASP.NET MVC的项目改成用.NET CORE来写,写好了部署上去了,结果问题一大堆,今天慢慢检查了一下,发现一个大坑: 写控制器里的方法接收参数数都是直接写在控制器的方法参数里的,如: ...

  3. legend2---开发日志10(ajax请求的方法是否同样会执行base控制器里面的方法)

    legend2---开发日志10(ajax请求的方法是否同样会执行base控制器里面的方法) 一.总结 一句话总结:会执行的,所以写base控制器里面的方法要注意,base控制器里面的方法要以查数据为 ...

  4. spring mvc: 参数方法名称解析器(用参数来解析控制器下的方法)MultiActionController/ParameterMethodNameResolver/ControllerClassNameHandlerMapping

    spring mvc: 参数方法名称解析器(用参数来解析控制器下的方法)MultiActionController/ParameterMethodNameResolver/ControllerClas ...

  5. TP框架控制器和对应方法创建

    控制器和对应方法创建 控制器是MVC模式中的核心,TP默认有一个控制器:   Index控制器里面有一个操作方法:Index   我们在访问http://localhost:8080/Thinkphp ...

  6. [Xcode 实际操作]九、实用进阶-(3)给代码方法添加宏注释

    目录:[Swift]Xcode实际操作 本文将演示如何在方法列表中,对方法名称进行注释. 这样可以使程序,按功能分块,使方法清晰.易读并且方便定位. 在项目导航区,打开视图控制器的代码文件[ViewC ...

  7. 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组

    真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...

  8. legend3---17、如何抽象和复用控制器中的方法

    legend3---17.如何抽象和复用控制器中的方法 一.总结 一句话总结: 比如不同的控制器中都用了检查手机号是否已经注册,是否没注册这样的功能,我应该如何抽象和复用方法 新建一个处理手机号码的模 ...

  9. ThinkPHP开发api时多级控制器的访问方法

    发开api时,经常会用到thinkphp的多级控制器,访问方法如下: 例如:有v1和v2两个版本的接口 v1:版本控制器(类文件位置为:application/api/controller/v1/Us ...

随机推荐

  1. linux中怎样设置dhcpd

    linux中怎样设置DHCP  在 linux 以下设置 DHCP一点也不复杂﹐您全部要做的仅仅有一个文件﹕/etc/dhcpd.conf . 以下﹐我用我自己的设置文件来说说怎么改动这个文件﹕  d ...

  2. QNX---- interrupts 例程

    #include <sys/neutrino.h> int interruptID; const struct sigevent * intHandler (void *arg, int ...

  3. .Net 4.0特性 Tuple元组

    Tuple 字面意思:元组.是.net4.0增加的新特性,是干什么的呢?总结一句,个人觉得这个东西 就是用来在有返回很多种类型的值时可以用到.它提供了8种类型的Tuple,直接看最复杂的那种(其实不是 ...

  4. Windows server 2008 R2实现多用户远程连接

    原文 Windows server 2008 R2实现多用户远程连接 经常使用远程桌面的朋友可能会注意到,Windows server 2008 R2中,远程桌面最多只允许两个人远程连接,第三个人就无 ...

  5. eval 捕获dbi错误

    [root@dr-mysql01 ~]# cat t2.pl use DBI; my $dbUser='zabbix'; my $user="root"; my $passwd=& ...

  6. [Android Studio 权威教程]Windows下安装Android Studio

    从AS 0.5版本号開始使用.也是AS的推行者,在ApkBus公布的第一篇Android Studio Perview 2 获得了50K的浏览,1800多条回复下载. 在我的[Android Stud ...

  7. poj1011Sticks

    传说中的poj必做50题之中的一个-- 这是个传说中的搜索, 一開始以为, 仅仅要棒子加起来等于如果的原始长度, 那么这几根选择的棒子就不用管了, 结果卡在第一个例子-- 看了一下,发现, 代码把1, ...

  8. php中include文件变量作用域的研究

    原文:php中include文件变量作用域的研究 在php中我们有时候需要include一个文件.比如我前段时间在写一个框架的时候,打算用原生的php作为模板,然后写一个display方法引入模板文件 ...

  9. jfinal常见问题

    2014年的时候,学过一段时间的JFinal,当时主要是了解这个框架,研究了下源码,看懂了部分.今天,2015年2月7日,弄了一下午的JFinal,把未来要上线的一个官网项目,迁移到了JFinal.下 ...

  10. CodeForces Round #191 (327C) - Magic Five 等比数列求和的快速幂取模

    很久以前做过此类问题..就因为太久了..这题想了很久想不出..卡在推出等比的求和公式,有除法运算,无法快速幂取模... 看到了 http://blog.csdn.net/yangshuolll/art ...