(1).只有当账号和密码输入框都有值的时候,登录按钮才能交互
(2).当取消勾选记住密码后,自动登录按钮也随之取消;当勾选了自动登录按钮时,记住密码按钮也一同勾选。
(3).点击登陆后,弹出蒙版,界面不可交互,程序能够简单判断账号和密码是否正确,如果不正确则给出相应的提示,如果正确则跳转到联系人列表界面。
2.segue的三个属性
每一个Segue对象,都有3个属性
唯一标识 @property (nonatomic, readonly) NSString *identifier;
来源控制器 @property (nonatomic, readonly) id sourceViewController;
2.segue的两种类型
根据Segue的执行(跳转)时刻,Segue可以分为2大类型
自动型: 点击某个控件后(比如按钮),自动执行Segue,自动完成界面跳转
在恰当的时刻,使用perform方法执行对应的Segue [self performSegueWithIdentifier:@"login2contacts" sender:nil];
Segue必须由来源控制器来执行,也就是说,这个perform方法必须由来源控制器来调用。如果点击某个控件后,需要做一些判断,也就是说:满足一定条件后才跳转到下一个界面,建议使用“手动型Segue”
利用 performSegueWithIdentifier: 方法可以执行某个Segue,完成界面跳转
4.performSegueWithIdentifier:sender: 方法的完整执行过程
[ self performSegueWithIdentifier : @“login2contacts” sender : nil ];
(1)根据identifier去storyboard中找到对应的线,新建UIStoryboardSegue对象
设置Segue对象的sourceViewController(来源控制器)
新建并且设置Segue对象的destinationViewController(目标控制器)
(2)调用sourceViewController的下面方法,做一些跳转前的准备工作并且传入创建好的Segue对象
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;
// 这个 sender 是当初 performSegueWithIdentifier:sender: 中传入的 sender
(3)调用Segue对象的 - ( void )perform; 方法开始执行界面跳转操作
取得sourceViewController所在的UINavigationController
顺传
控制器的跳转方向: A C
数据的传递方向 : A C
数据的传递方式 : 在A的prepareForSegue:sender:方法中根据segue参数取得destinationViewController, 也就是控制器C, 直接给控制器C传递数据
控制器的跳转方向: A C
数据的传递方向 : C A
//- (BOOL)textFieldShouldBeginEditing:(UITextField*)textField
//{
// NSLog(@"%@", self.usernameField.text);
// return YES;
// 文本框开始编辑的时候调用
//- (void)textFieldDidBeginEditing:(UITextField*)textField{
// NSLog(@"%@", self.usernameField.text);
//- (BOOL)textFieldShouldEndEditing:(UITextField*)textField
//{
// NSLog(@"%@", self.usernameField.text);
// return YES;
// NSLog(@"%@", self.usernameField.text);
//- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
//{
// NSLog(@"%@", self.usernameField.text);
// return YES;
{
UIActionSheet * sheet = [[ UIActionSheet alloc ] initWithTitle : @" 你确定要注销嘛 ?" delegate : self cancelButtonTitle : @" 取消 " destructiveButtonTitle : @" 注销 " otherButtonTitles : nil , nil ];
[sheet showInView : self . view ];
}
// actionSheet的点击事件 buttonIndex 从上到下 从0依次递增
- ( void )actionSheet:( UIActionSheet *)actionSheet clickedButtonAtIndex:( NSInteger )buttonIndex
{
NSLog ( @"%ld" , buttonIndex);
if (buttonIndex == 0 ) {
dispatch_after ( dispatch_time ( DISPATCH_TIME_NOW , ( int64_t )( 0.25 * NSEC_PER_SEC )), dispatch_get_main_queue (), ^{
// 注销
[ self . navigationController popViewControllerAnimated : YES ];
- ( void )prepareForSegue:( UIStoryboardSegue *)segue sender:( id )sender
{
// 获取目标控制器
UIViewController * vc = segue. destinationViewController ;
// 判断类型
if ([vc isKindOfClass :[ AddViewController class ]]) {
// add
AddViewController * add = ( AddViewController *)vc;
add. delegate = self ;
}
else {
// edit
EditViewController * edit = ( EditViewController *)vc;
edit. delegate = self ;
// 获取点击 tableview 的 cell 的位置 (indexpath)
NSIndexPath * path = [ self . tableView indexPathForSelectedRow ];
Contact * con = self . contacts [path. row ];
edit. contact = con;
}
if (! self . saveButton . hidden ) {
self . nameField . enabled = NO ;
self . numberField . enabled = NO ;
self . saveButton . hidden = YES ;
sender. title = @" 编辑 " ;
// 取消的时候 文本框的值 重新等于传过来的模型的数据
self . nameField . text = self . contact . name ;
self . numberField . text = self . contact . number ;
}
else {
self . nameField . enabled = YES ;
self . numberField . enabled = YES ;
self . saveButton . hidden = NO ;
sender. title = @" 取消 " ;
// 光标放在电话上
[ self . numberField becomeFirstResponder ];
每个iOS应用都有⾃己的应⽤沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应⽤必须待在⾃己的沙盒里,其他应用不能访问该沙盒(提示:在IOS8中已经开放访问)
Documents :保存应用运行时生成的 需要持久化的数据 , iTunes 同步设备时 会备份 该目录。例如,游戏应用可将游戏存档保存在该目录
tmp :保存应用运行时所需的 临时数据 ,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。 iTunes 同步设备时 不会备份 该目录
Library/Caches :保存应用运行时生成的 需要持久化的数据 , iTunes 同步设备时 不会备份 该目录。一般存储体积大、不需要备份的非重要数据
Library/Caches : ( 跟 Documents 类似的 2 种方法 )
利用沙盒根目录拼接 ”Caches” 字符串
利用 NSSearchPathForDirectoriesInDomains 函数 ( 将函数的第 2 个参数改为: NSCachesDirectory 即可 )
// 将数据封装成字典
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@" 母鸡 " forKey:@"name"];
[dict setObject:@"15013141314" forKey:@"phone"];
[dict setObject:@"27" forKey:@"age"];
// 将字典持久化到 Documents/stu.plist 文件中