您的位置:首页 > 其它

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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: