私人通讯录
来源:互联网 发布:python可以写界面么 编辑:程序博客网 时间:2024/05/18 22:40
(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 = [[UIActionSheetalloc]initWithTitle:@"你确定要注销嘛?"delegate:selfcancelButtonTitle:@"取消"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.navigationControllerpopViewControllerAnimated:YES];
- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender
{
// 获取目标控制器
UIViewController* vc = segue.destinationViewController;
// 判断类型
if ([vcisKindOfClass:[AddViewControllerclass]]) {
// add
AddViewController* add = (AddViewController*)vc;
add.delegate= self;
}
else {
// edit
EditViewController* edit = (EditViewController*)vc;
edit.delegate= self;
// 获取点击tableview的cell的位置(indexpath)
NSIndexPath* path = [self.tableViewindexPathForSelectedRow];
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.numberFieldbecomeFirstResponder];
每个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文件中
- 私人通讯录
- 私人通讯录
- 私人通讯录思路
- iOS私人通讯录
- No4 私人通讯录
- 小结:私人通讯录
- 小结:私人通讯录知识点
- 私人通讯录Demo - iOS
- 私人通讯录功能详细实现
- UINavigationController实例之私人通讯录
- 自建项目分享-私人通讯录
- iOS开发 - 私人通讯录实例
- 【案列】私人通讯录01
- 私人通讯录中遇到的注意点
- 练习:私人通讯录(整理思路)
- ui进阶第三天,私人通讯录的创建(元宵节快乐)
- 【案列】私人通讯录02 - 数据存储和删除
- 练习:私人通讯录(界面和功能展示)
- List sublist的toIndex不能超过500
- Lua 变量
- 10只新股批量来袭 影子股领衔四类概念股
- Cloudfoundry 实践进阶
- storyboard : 在 UITableViewController 中使用自定义
- 私人通讯录
- MySQL的复制和临时表Temporary Table
- 通过Docker源安装最新版本
- hdu 5569
- linux /proc/loadavg(平均负载)
- 数据存储
- 数值中的一些方法概述
- BZOJ1208: [HNOI2004]宠物收养所 Splay
- UITabBarContro的笔记