模态视图

根据书上例子做的一个登录注册界面,只出了一个问题,然后百度一下,就速速解决了,so开心!

1,建一个工程,向故事板中,拖入一个navigation控件,再拖入其它控件如下图(1)所示:


(1)

2,再拖入一个ViewController到故事板中,打开其标识检查器,将Stroyboard  ID改称“registerViewController”,如图(2)。拖入一个navigation到该试图控制器中,再拖入其余控件如下图(3):

                         

                   (2) (3)

3,点击File->New->File新建一个Objective-C Class,创建RegisterViewController类,且将第二个视图控制器标识检查器中的Class,设置为这个类,使得这个类能控制第二个标识控制器。

4,设置输出口和动作连线,如下面代码所示:

(1),ViewController.h中:

#import <UIKit/UIKit.h>


@interface ViewController : UIViewController<UITextFieldDelegate>


- (IBAction)regonclick:(id)sender;


@end

备注:将“登录”,“注册”两个控件设置为动作;

(2),RegisterViewController.h中:

#import <UIKit/UIKit.h>


@interface RegisterViewController : UIViewController<UITextFieldDelegate>


@property (strong, nonatomic) IBOutlet UITextField *txtUsername;


- (IBAction)done:(id)sender;



@end


备注:将“done”设置为动作,textFiled控件设置为输出口;

5,接下来就是.m文件代码啦
(1),ViewController.m:

#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad

{

    //在该方法中,要实现视图间参数的传递

    [super viewDidLoad];

    

    //以广播通知机制实现参数的传递:

    //在该方法中注册一个自定义通知“registerCompletionNotifcation”,通知到来时发出“registerCompletion:”消息,其参数notification中可以包含回传的参数,他们都放在NSDictionary字典中

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(registerCompletion:) name:@"registerCompletionNotifcation" object:nil];

    

// Do any additional setup after loading the view, typically from a nib.

}


-(void)registerCompletion:(NSNotification *) notification{


    NSDictionary *theData=[notification userInfo];

    

    NSString *username=[theData objectForKey:@"username"];

    

    NSLog(@"username=%@",username);

    

    

}



- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


- (IBAction)regonclick:(id)sender {

    

    //获取故事板

    UIStoryboard *mainStoryboard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];

    

备注:上句代码开始写成UIStoryboard *mainStoryboard=[UIStoryboard storyboardWithName:@"MainStroyBoard" bundle:nil];导致错误,如下图(4),因为系统根据这个名字找不到故事板。


(4)


    //通过registerViewControllerID获得视图控制器对象

    UIViewController *registerViewController=[mainStoryboard instantiateViewControllerWithIdentifier:@"registerViewController"];

    

    //设置模态视图呈现和关闭时的动画效果,此处是呈现时沿垂直方向由底向上退出,覆盖原视图,关闭时由上往底部退出

    registerViewController.modalTransitionStyle=UIModalTransitionStyleCoverVertical;

    

    //呈现模态视图,completion函数有点像Java中的匿名类

    [self presentViewController:registerViewController animated:YES completion:^{NSLog(@"Present Modal View");}];

    

    

}


//放弃第一响应者以关闭键盘

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

    

    [textField resignFirstResponder];

    return YES;

    

}


@end


(2),RegisterViewController.m:

#import "RegisterViewController.h"


@implementation RegisterViewController


- (IBAction)done:(id)sender {

    

    //关闭模式视图

    [self dismissViewControllerAnimated:YES completion:^{NSLog(@"Modal View Done");

    

        //NSDictionary *dataDict =[NSDictionary dictionaryWithObjects:self.txtUsername.text forKeys:@"username"];

        

        NSDictionary *dataDict=[NSDictionary dictionaryWithObject:self.txtUsername.text forKey:@"username"];

        

        [[NSNotificationCenter defaultCenter] postNotificationName:@"registerCompletionNotifcation" object:nil userInfo:dataDict];

        

    

    

    

    }];

    

    //关闭完成completion时,添加代码投送通知registerCompletionNotifcation,其中通知的参数,中字典datadict中。

    

    

}


//放弃第一响应者以关闭键盘

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

    

    [textField resignFirstResponder];

    return YES;

    

}

@end

备注:在设置键盘的关闭时,注意,右击textField控件,设置如下图(5),(6):


       



(5)   (6)


6,后面的就是我自己在教材基础上添加的内容啦,设计登录界面,还是要拖入一个ViewController到故事板中,Storyboard ID设置为:register;新建一个Objective-C Class ,命名为Register“,修改这第三个视图控制器的Class为该类。这样我们需要修改ViewController.h和ViewController.m文件啦,

(1),在ViewController.h文件中,将“登录”按钮设置为动作,命名为:Load。

#import <UIKit/UIKit.h>


@interface ViewController : UIViewController<UITextFieldDelegate>


- (IBAction)regonclick:(id)sender;


- (IBAction)Load:(id)sender;


@end


(2),在ViewController.m中实现Load方法即可,这个方法与上面“注册”动作的方法一样,都是需要“获取故事板->通过Storyboard ID获取子视图控制器->设计模式视图动画效果->呈现模式视图”

- (IBAction)Load:(id)sender {

    

    //获取故事板

    UIStoryboard *mainStoryboard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];

    

    //通过registerViewControllerID获得视图控制器对象

    UIViewController *registerViewController=[mainStoryboard instantiateViewControllerWithIdentifier:@"register"];

    

    //设置模态视图呈现和关闭时的动画效果,此处是呈现时沿垂直方向由底向上退出,覆盖原视图,关闭时由上往底部退出

    registerViewController.modalTransitionStyle=UIModalTransitionStyleCoverVertical;

    

    //呈现模态视图,completion函数有点像Java中的匿名类

    [self presentViewController:registerViewController animated:YES completion:^{NSLog(@"Present Modal View");}];

    

}


7,点击登录后,界面如下(7):


(7)

8,当我们点击return按钮时,又会返回到登录界面,这只需要我们将return开关设置为动作,然后在register.m文件中实现这个方法:

#import "Register.h"


@implementation Register


- (IBAction)return:(id)sender {

    

    

    //关闭模式视图

    [self dismissViewControllerAnimated:YES completion:^{NSLog(@"Modal View Done");

        

    }];

    

}

@end



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值