根据书上例子做的一个登录注册界面,只出了一个问题,然后百度一下,就速速解决了,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
#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)
//通过registerViewController的ID获得视图控制器对象
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):
(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];
//通过registerViewController的ID获得视图控制器对象
UIViewController *registerViewController=[mainStoryboard instantiateViewControllerWithIdentifier:@"register"];
//设置模态视图呈现和关闭时的动画效果,此处是“呈现时沿垂直方向由底向上退出,覆盖原视图,关闭时由上往底部退出”
registerViewController.modalTransitionStyle=UIModalTransitionStyleCoverVertical;
//呈现模态视图,completion函数有点像Java中的匿名类
[self presentViewController:registerViewController animated:YES completion:^{NSLog(@"Present Modal View");}];
}
(7)
8,当我们点击return按钮时,又会返回到登录界面,这只需要我们将return开关设置为动作,然后在register.m文件中实现这个方法:
#import "Register.h"
@implementation Register
- (IBAction)return:(id)sender {
//关闭模式视图
[self dismissViewControllerAnimated:YES completion:^{NSLog(@"Modal View Done");
}];
}
@end