• iOS相关的UI最新知识点总结(二)


    50.直接创建的tab记得设置数据源self.tableView.dataSource = self;

    51. -(NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section设置组尾标题

    52. -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section设置组头标题

    53.设置行高self.tableView.rowHeight = 100;这还是每行的高度一致的时候设置的(统一行高)

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath,单独设置行高

    54. self.tableView.separatorColor = [UIColor redColor];

    55.设置分隔线样式UITableViewCellSeparatorStyle

    56. 分割线的内边距 上下是无效的, 左边会影响cell中文字的位置,右边不会影响cell中的控件self.tableView.separatorInsets

    57. 给UITableView设置头和尾

    设置头View 只有高度起作用

    58. self.tableView.tableHeaderView = view;

    self.tableView.tableFooterView = view; 设置尾View X 和 高度都有作用

    59. UITableViewCell的常见属性

    1:设置图片 cell.imageView.image

    2.设置文本标题 cell.textLabel.text

    3:设置详情描述标题 cell.detailTextLabel.text

    60.设置右侧标签的图标cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;(系统提供好的),如果自己的图片可以设置cell.accessoryView = view;

    61. cell.backgroundColor = [UIColor redColor];//cell的背景色

    62. cell.selectedBackgroundView = view;//cell选中时的背景色时

    63.重写set方法的时候,记得先给变量赋值

    64. self.tableView.separatorStyle= UITableViewCellSeparatorStyleNone;通过这句话,可以去掉分隔线

    65.设置tableView的style

    self = [super initWithStyle:UITableViewStyleGrouped];

    [[UITableView alloc] initWithFrame:(CGRect)frame style:(UITableViewStyle)style]

    使用self.tableView.style = UITableViewStyleGrouped; 会出现错误,只读属性

    66.字典转模型的时候,一般在最最容易获得字典数组的地方进行字典转模型

    模型嵌套模型:模型里面的一个属性同时也是字典数组,在模型第一层KVC的时候,将获取到的值(字典数组属性)转化为模型数组,将模型数组作为属性保存到第一层模型里面

    67.在设置动画切换上一张下一张时,通过设置全局变量index,通过不同的index来关联不同的界面数值,实现界面的更新

    68.cell可以设置背景以及选中之后的背景

    1)背景

        UIView *view = [[UIView alloc]init];

        view.frame = CGRectMake(20, 50, 10, 5);

        view.backgroundColor = [UIColor redColor];

    cell.backgroundView = view;

    2)选中背景

    cell.selectedBackgroundView = view;

    69.KVC--键值编码,可以忽视属性是否私有

    70. tableView.separatorColor = [UIColor orangeColor];

    设置分隔线的颜色

    71.通过kvc的方式给属性赋值,

    -(NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView{

    //检查数组里面有无title属性,如没有,就遍历数组,取出数组里面的title属性的所有的值,组成新的数组返回

        return [self.carKindsArray valueForKey:@"title"];

    }

    72. 设置alertView

    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"修改名称" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"1",@"2", nil];//取消是0,剩下的一次加一

    [alertView show];

    73.设置alertView的输入框

    alertView.alertViewStyle = UIAlertViewStylePlainTextInput;单个输入框的模式

    UIAlertViewStyleSecureTextInput,单个加密输入框

    UIAlertViewStyleLoginAndPasswordInput用户名密码输入框

    UITextField *field = [alertView textFieldAtIndex:0];设置输入框的文字,从上面到下面索引为0、1、2。。

    74. - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex NS_DEPRECATED_IOS(2_0, 9_0)//输入框的按钮的点击事件,通过索引进行区分

    75.tableView的刷新方式

    1)[self.tableView reloadData];刷新所有

    2)[self.tableView reloadRowsAtIndexPaths:@[self.indexPath] withRowAnimation:UITableViewRowAnimationRight];单行刷新

    76.精确的延时工具

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{延时之后的操作}

    77.一般设置间距,经常用到的值,采用宏定义例:#define padding 10

    78.获取已经存在的尺寸的x,y信息

    CGRectGetMaxX、CGRectGetMidY等等

    79.通过字符串,以及字体的大小,设置字符串的长度

    CGRect userImageViewBounds = [字符串 boundingRectWithSize:CGSizeMake(MAXFLOAT, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:字体值]} context:nil];

    80.最新的弹框方式

    UIAlertController * alertController=[UIAlertController alertControllerWithTitle:@"提示" message:@"恭喜你过关了" preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction *actionOK = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];

        UIAlertAction *actionCancle = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:nil];

       

        [alertController addAction:actionOK];

        [alertController addAction:actionCancle];

       

    [self presentViewController:alertController animated:YES completion:nil];

    81.一般定义c成为几种特别的分类,可以采取枚举的方式定义,下面是枚举定义的示例:typedef enum {

        CZMessageTypeMe = 0,

        CZMessageTypeOther

    }CZMessageType;

    82. control + command+方向上下不同的.m和.h之间

    进行切换

    83.为不可变数组添加元素,应当先转化为可变数组

     NSMutableArray *nmArray = self.tgArray;

     [nmArray addObject:tg];

     self.tgArray = nmArray;

    84.调用代理方法或者是block回调时,应当先进行判断再调用方法

    if ([self.delegate respondsToSelector:@selector(tgFooterLoadMoreData:)]) {

     [self.delegate tgFooterLoadMoreData:self];

    }

    85.

    [[[NSBundle mainBundle]loadNibNamed:@"CZTgFooterView" owner:nil options:nil]lastObject];记得加last zhiObject

    86.为什么使用frame模型的问题,因为heightForRow这个方法在cellForRow方法前面执行。里面的cell并未生成,但是必须返回cell的行高,所以需要通过模型数据先将cell的高度计算出来,返回

    87. NSLog(@"%s",__func__);查看方法执行

    88. -(instancetype)initWithStyle:(UITableViewCellStyle)style通常在c初始化方法里面只做两件事情

    (1. 实例化子控件

    (2. 将子控件添加到父控件中,并不会设置数据以及frame

    89.通过字符串,判断占用的bounds的fang方式

    CGRect messageBounds = [字符串 boundingRectWithSize:CGSizeMake(self.contentView.frame.size.width - 2*padding, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:一个字典 context:nil];

    NSDictionary *传入的字典= @{NSFontAttributeName:[UIFont systemFontOfSize:15]};

    90.一般使用frame模型之后,模型里main一般有数据模型,所以懒加载数据时,我们仅仅加载frame模型即可,通过frame模型里面的数据模型属性赋值,所以通过已经使用plist加载的好的数据模型,创建frame对象,创建frame模型数组,最终我们获得的是包涵数据模型的frame模型数组

      NSMutableArray *nmArray = [NSMutableArray array];

    //2.1.2 遍历字典数组

    for (NSDictionary *dict in _messageFrameArray) {

    //2.1.3 字典转模型并添加到可变数组中

    CZMessage *message = [CZMessage messageWithDict:dict];

    // 创建CZMessageFrame模型

    CZMessageFrame *messageFrame = [[CZMessageFrame alloc]init];

    messageFrame.message = message;

    //将frame模型添加到可变数组中

     [nmArray addObject:messageFrame];

    }

    //2.1.4 将存放为模型的可变数组,赋值给字典数组

    _messageFrameArray = nmArray;

    91.也是涉及到frame模型的使用,一般是用来获取行高的时候使用,

    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return messageFrame.rowHeight }

    92.通知的使用

    1).创建通知

    NSNotification *notification = [NSNotification notificationWithName:@"yule" object:sinaNews userInfo:@{@"奥斯卡":@"小李子终于不是打酱油的,拿到小金人了"(字典类型)}];

    2).发布通知[notificationCenter postNotification:notification];

    3)有必要监听消息的人注册消息监听

    [notificationCenter addObserver:p1 selector:@selector(showNotifaction:) name:nil object:sinaNews];

    4)接受到消息的监听着,调用已经定义好的方法

    - (void)showNotifaction:(NSNotification *)notification{

    NSDictionary *dict = notification.userInfo;

     NSLog(@"接收人 %@ , 接收到的消息 %@",self.name,dict[@"奥斯卡"]);

    NSLog(@"接收人 %@ , 接收到的消息 %@",self.name,dict[@"朝鲜"]);

    5).注销消息的监听

    - (void)dealloc{

    //ARC 非ARC -> MRC

    //在非ARC中一定不要忘记

    //    [super dealloc];

    //销毁监听对象

     [[NSNotificationCenter defaultCenter]removeObserver:self];

    }

    93.也是源于通知的使用,键盘的监听(出现和消失)

    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeKeyBoard:) name:UIKeyboardWillShowNotification object:nil];

     [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeKeyBoard:) name:UIKeyboardWillHideNotification object:nil];

    调用通知的方法

    - (void)changeKeyBoard:(NSNotification *)notification{

    NSLog(@"%@",notification);

    //获取userInfo信息

    NSDictionary *userInfo = notification.userInfo;//通过字典可以获得键盘的frame以及动画的时间

    CGAffineTransform transForm = self.view.transform;

    //获取移动的位置 屏幕的高度 - 最终显示的frame的Y = 移动的位置

    //1. 获取键盘最终显示的y

    NSValue *value = userInfo[UIKeyboardFrameEndUserInfoKey];

    CGRect endFrame = [value CGRectValue];

    CGFloat moveY = - (self.view.frame.size.height - endFrame.origin.y);

    //移动

    transForm = CGAffineTransformMakeTranslation(0, moveY);

    //执行动画移动,时间为键盘动画的时间

     [UIView animateWithDuration:[userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue] animations:^{

    self.view.transform = transForm;//通过键盘的位置,将view整体的位置进行移动

    }];

    }

    94.获取当前的时间

    NSDate *date = [NSDate date];

    //时间格式化

    NSDateFormatter *format = [[NSDateFormatter alloc]init];

    //设置格式化的样式

    format.dateFormat = @"HH:mm";

    //按照样式转换NSDate

    NSString *currentTime = [format stringFromDate:date];

    95.使用textFiled点击输入按钮,return时会调用代理的方法

    self.textField.delegate = self;

    - (BOOL)textFieldShouldReturn:(UITextField *)textField{}

    96. 清空textField信息

    textField.text = @"";

    97.滚动到tableView的最后一行的方法

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.messageFrameArray.count - 1 inSection:0];

    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];

    98.如果对于一个模块,有的存在有的不存在,可以设置它的状态是否隐藏,注意cell重用的问题

    99.设置textField的左边有一段的输入边距

    self.textField.leftView = view;

    self.textField.leftViewMode = UITextFieldViewModeAlways;

    100.在tableView的数据,展示方式发生改变的时候,记得刷新tableView

     

  • 相关阅读:
    JAVA微信公众号网页开发——获取公众号关注的所有用户
    删除mysl
    sql语言(mysql)
    mycat读写分离
    mysql双主双从技术
    实用的10个日志处理案例
    ansible基本操作
    MySQL改密
    mysql源码包安装
    ftp搭建mysql服务器
  • 原文地址:https://www.cnblogs.com/chaoyueME/p/5557229.html
Copyright © 2020-2023  润新知