1.15-学习概况
2016-01-15 14:19
204 查看
1月15
tableView的cell创建方式
先从缓存池中,如果缓存池中没有可循环利用的cell,先去中找到合适的cell,如果storyboard没有的话,再从我们写的代码创建
偏好设置
● 很多iOS应用都支持偏好设置,比如保存用户名、密码、字体⼤小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能● 每个应⽤都有个NSUserDefaults实例,通过它来存取偏好设置
● ⽐如,保存⽤户名、字体大小、是否自动登录。
// 存储偏好设置 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:self.accountField.text forKey:AccountKey]; [defaults setObject:self.pwdField.text forKey:PwdKey]; [defaults setBool:self.rmbPwdSwitch.isOn forKey:RmbPwdKey]; [defaults setBool:self.autoLoginSwitch.isOn forKey:AutoLoginKey]; [defaults synchronize]; // 读取上次的偏好设置 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; self.accountField.text = [defaults objectForKey:AccountKey]; self.rmbPwdSwitch.on = [defaults boolForKey:RmbPwdKey]; self.autoLoginSwitch.on = [defaults boolForKey:AutoLoginKey];
NSKeyedArchiver
- (instancetype)initWithCoder:(NSCoder *)coder { if (self = [super init]) { self.name = [coder decodeObjectForKey:@"name"]; self.phone = [coder decodeObjectForKey:@"phone"]; } return self; } - (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:self.name forKey:@"name"]; [encoder encodeObject:self.phone forKey:@"phone"]; }
要归档到Documents目录下,下面方法获得路径Documents,一般写在宏中方便调用
#define ContactsFilepath [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"contacts.data"]
恢复(解码)对象
// 1.从文件中读取联系人数据 - (NSMutableArray *)contacts { if (_contacts == nil) { // 1.从文件中读取联系人数据 _contacts = [NSKeyedUnarchiver unarchiveObjectWithFile:ContactsFilepath]; // 2.如果数组为nil if (_contacts == nil) { // 文件不存在 _contacts = [NSMutableArray array]; } } return _contacts; }
归档一个对象
// 归档 [NSKeyedArchiver archiveRootObject:self.contacts toFile:ContactsFilepath];
取得tableView中选中的那一行
// 取得选中的那行 NSIndexPath *path = [self.tableView indexPathForSelectedRow];
监听文本框发出的通知
通知的具体介绍看PPT12[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.accountField];
prepareForSegue:sender:
/** * 执行segue后,跳转之前会调用这个方法 * 一般在这里给下一个控制器传递数据 */ - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // 1.取得目标控制器(联系人列表控制器) UIViewController *contactVc = segue.destinationViewController; // 2.设置标题 contactVc.title = [NSString stringWithFormat:@"%@的联系人列表", self.accountField.text]; }
performSegueWithIdentifier:sender:
滑动删除的功能
#pragma mark - tableView的代理方法 /** * 如果实现了这个方法,就自动实现了滑动删除的功能 * 点击了删除按钮就会调用 * 提交了一个编辑操作就会调用(操作:删除\添加) * @param editingStyle 编辑的行为 * @param indexPath 操作的行号 */ - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { // 提交的是删除操作 // 1.删除模型数据 [self.contacts removeObjectAtIndex:indexPath.row]; // 2.刷新表格 [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop]; // 局部刷新某些行(使用前提:模型数据的行数不变) // [self.tableView reloadRowsAtIndexPaths:<#(nonnull NSArray<NSIndexPath *> *)#> withRowAnimation:<#(UITableViewRowAnimation)#>] // 3.归档 [NSKeyedArchiver archiveRootObject:self.contacts toFile:ContactsFilepath]; } }
叫出键盘
[self.phoneField becomeFirstResponder];
结构体转value对象
value对象转结构体
CGPoint pos = [pathPoints[i] CGPointValue];
相关文章推荐
- Android沉浸式状态栏实现
- Qt5.5中OpenGL着色器程序编写
- (2)html学习笔记(粗略几笔)
- bitmapfactory.options 优化内存小问题
- iOS 开发 设置网络请求允许使用http
- 提交json串格式的POST请求
- (转载)iOS 开发之EXC_BAD_ACCESS异常分析
- java特种兵读书笔记(3-6)——java程序员的OS之JAVA常用工具
- Nginx中文参考手册
- Android TextWatcher使用详解
- 通过scp批量推送文件到远程目录
- 通过scp批量推送文件到远程目录
- [DGMGRL]Dgmgrl管理Dataguard(1)
- java 发送html格式邮件 样式混乱解决
- 支付 平台连接
- Clang-Format的使用及其自定义格式
- Python 模块之间传递变量
- Oracle函数和存储过程
- 《ActiveMQ In Action》Chapter 4 Connecting to ActiveMQ
- iOS开发 Xcode7 使用NSURLSession发送HTTP请求报错