2015年07月11日第八天笔记

细节归纳
一、控制器里的细节
1)是否允许cell被选中

self.tableView.allowSelection = NO

2) 设置分割线的样式

self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

3) 设置自定义的颜色

self.tableView.backgroundColor = [UIColor colorWithRed:235.0/255.0 green:235.0/255.0 blue:235.0/255.0 alpha:0.6];

4) 被重用的cell是存放在tableView管理的缓冲池里 通过出列获得

5)创建一个cell 用的是对象方法

6)创建frame模型 返回cell的高度 是 CGFloat类型的

7)设置是否隐藏状态栏 要在tableView里 实现 -(BOOL)prefersStatusBarHidden 方法
二、Frame模型里的细节
1. 在.h文件中定义一个数据模型的强引用,各子控件的frame,cell的高度
2.在.m文件中实现处理文本真实size的方法

-(CGSize)textWithString :(NSString *)text andFont:(UIFont *)font maxSize:(CGSize)maxSize
{
    NSDictionary *nameDict = @{NSFontAttributeName:font};
    return [text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:nameDict context:nil].size;
}

3.设置文本范围参考值

CGSize chatViewSize = CGSizeMake(160,MAXFLOAT);

三、cell类的细节
1.在.h里定义一个frame模型属性 强引用
2.在.m里定义一个类延展 里面定义各个子控件的View 弱引用
3.实现 initWithStyle方法
4.在设置数据的时候,要考虑没有数据的字段
5.设置文本字体大小

charView.titleLabel.numberOfLines = 0
charView.titleLabel.font = [UIFont systemFontOfSize:14];

’四、数据模型类的细节
1.在.h里需要枚举类型就定义一个 注意:命名:元素:前缀+类名+作用+意义;类型名:前缀+类名+作用

QQ聊天界面问题解决方法
1、为解决相同时间的聊天只出现一次时间显示
1)在数据模型定义一个相同时间标识A
2)在控制器的模型数组getter方法里,利用在添加下一个数据记录的之前的时机获得数组最后一个元素,和将要加入的记录
比较,同时设置要加入记录的A标识是否时间相同

2、为解决数据不同导致的frame大小不一样(frame类)
1)在计算各控件frame大小时,要判断每个字段数据是否存在不同的可能
a:时间标识影响时间控件是否有frame b:消息发送者类型影响头像控件和信息控件 C:头像的Y和消息的Y影响cell高度

3、为解决发送消息在信息按钮内,同时按钮背景能局部拉伸适应发送文本的大小,完全容纳文本(cell类)

1)首先要知道消息文本实际上是按钮的标题内容,还有就是按钮的标题实际上显示在按钮的一个titleLabel子控件上的
2)设置文本字体大小,换行,按钮填充

      chatView.tilteLabel.font = [UIFont systemFontOfSize:14];
charView.titleLabel.numberOfLines = 0;
      charView.contentEdgeInsets = UIEdgeInsetsMake(30,30,30,30); 设置内边距

3) 对背景图片拉伸处理,让其适应控件frame大小,显示这个动作要放在控件设置frame

    图片拉伸:UIImage *newSendImage = [self resiableImageWithName:@“chat_send_nor”];
    设置背景图:[self.chatView setBackgroundImage:newSendImage forState:UIConrolStateNormal]
    ```
拉伸方法实现 因为按钮的边距各增加了20,所以让改变按钮的大小,增加40 ,//  由于背景,文字的大小要比按钮的实际大小上下左右均少textMargin
-(UIImage *)resiableImageWithName:(NSString *)name
{
    UIImage *originalImage = [UIImage imageNamed:name];
    CGFloat w = originalImage.size.width*0.5;
    CGFloat h  = originalImage.size.height*0.5;
    return [originalImage resizableImageWithCapinsets:UIEdgeInsetsMake(h,w,h,w) resizingMode:UIImageResizingModeStretch];
}
-(UIImage *)resiableImageWithName:(NSString *)name
{
    UIImage *originalImage = [UIImage imageNamed:name];
    CGFloat w = originalImage.size.width*0.5;
    CGFloat h = originalImage.size.height*0.5;
    return [originalIma];
}

4、当滚动屏的时候 将键盘退出
在控制器里 实现代理方法

-(void)srcollViewWillBeginBraggng:(UIScrowView*)srcollView
{
    [self.view endEditing:YES];
}

5、解决光标闪动位置
1)将文本框拖入控制器
2)利用文本控件.leftView,重写自定义个赋给它,然后

self.inputView.leftViewMode = UITextFieldViewModlAlways;

6、解决键盘覆盖文本框的问题 (通知机制)
1)订阅键盘frame即将改变的通知 在viewDidLoad里写

[[NSNotificationCenter defaultCenter] //指定默认通知中心
ddObserver:self  //指定通知接受者
selector:@selector(keyboradWillChangeFrame:)//告诉接受者收到通知后作的动作
name:UIKeyboardWillChngeFrameNotification  //说明是通知名
object:nil //指明是发布者:nil代表所有发布者
];

2)通知到达后zhi执行的方法,通知到达改变View的位置

-(void)keyboredWillChangeFrame:(NSNotificaiton *)noti
{
    //NSLog(@“%@”,noti.userInfo);//打印通知内容
    利用通知内容获取键盘的最终位置
    CGRect keyBoardFrame = [noti.userInfo[@“UIKeyboradFrameEndUserInfoKey” CGRectValue]];
                                        UIKeyboardFrameEndUserInfoKey
    //用键盘的最终的y值 - view自身的高度就是要移动的距离
    CGFloat ct  = keyBoardFrame.origin.y - self.view.frame.size.height;
    //获取键盘的动画时间
    CGFLoat duration = [noti.userInfo[@“UIKeyboradAnimationDurationUserInfoKey”] floatValue];
    [UIView animateWithDuraiton:duration aimations:^{
            self.view.transform = CGAffineTransformMakeTranslation(0,ct);
    }];
}

3)在对象销毁时,要将对象移除订阅队列(必写)

-(void)dealloc
{
    [[NSNotificatinCenter defaultCenter] removeObserver:self];
}

4)%%点击cell 取消键盘

-(void)tochesBegan:(NSSet *)toches withEvent:(UIEvent *)event
{
    [self.superview.superview.superview endEditing;YES];
}

7、点击回车发送问题
1)将文本框面板设置为:ReturnKey 打下面的勾
2)设置UITextField的代理
self.messageView.delegate = self;
3) 实现一点击键盘的确定按钮的代理方法

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    //回复信息
    [self autoReplyWithString : textFiedl.text andType:HMMessageModelMe];
    //自动回复
    [self autoReplyWithString:@“自动回复”andType:HMMessageModelOther];
       //清空文字
    textField.text = nil;
    return YES;
}

4)创建新数据,刷新界面

-(void)autoReplyWithString:(NSString *)replayString andType:(HMMessageModelType)type
{
HMMessageFrame *messageFrame = [[HMMessgeFrame alloc] init];
HMMessageModel *messgaeModel = [[HMessageModel alloc] init];
messageModel.text = replyString;
messageModel.type = type;
NSDate *now = [NSDate date];
NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
dateFormater.dateFormat = @“HH:mm”;
messageMode.time = [dateFormater stringFromeDate:now];
HMMessageFraom *lastFrame = [self.messageFrames lastObject];
if([lastFrame.messageModel isEqualToString:messageModel.time])
{
messageMode.hideTime = YES:
}
messageFrame.messageModel  = messgeModel;
[self.messageFrams addObject:messageFrame];
[self.tableView reloadData];
[NSIndexPath *indexPath] = [NSIndexPath indexPathForRow:self.messageFrames.count -1 inSection:0];
[self.tableView scrollToRowAtIndexPath:indexPath atScrollPositioin:UITableViewSCrollPOsitionBottom animated:YES];

}


控件圆角效果
self.iconImageView.layer.cornerRadius = 25;
self.iconImageView.layer.masksToBounds = YES;
//  获取屏幕的宽度
CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;
//4.通知中心发出通知
//postNotificationName:通知的名称
//object:通知的发出者,
//userInfo:通知的内容
[NSNotificationCenter defaultCenter]postNotificationName:@"junshi" object:tenxun userInfo:@{ @"title":@"伊拉克战争”}];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Oracle第八章的课堂笔记中,我们学习了集合运算的概念和用法。集合运算是一种对数据库中的数据进行操作和查询的技术,它可以将多个查询的结果进行合并、交叉和排除等操作。 首先,我们学习了并集运算(UNION)。并集运算可以将两个或多个查询的结果合并为一个结果集,它会去除重复的行,并按照查询语句的顺序进行排序。我们需要注意的是,并集运算中要求两个查询的列数和类型必须匹配。 接着,我们学习了交集运算(INTERSECT)。交集运算可以将两个查询的结果中的共同部分提取出来,生成一个新的结果集。交集运算同样要求两个查询的列数和类型必须匹配,而且结果集中不会出现重复的行。 然后,我们学习了差集运算(MINUS)。差集运算可以从一个查询的结果中排除另一个查询的结果,生成一个新的结果集。差集运算同样要求两个查询的列数和类型必须匹配,并且结果集中不会出现重复的行。 最后,我们练习了使用这些集合运算符来解决实际问题。通过编写SQL查询语句,我们可以根据给定的条件和要求,使用并集、交集和差集等运算符来获取我们需要的结果。 总之,Oracle第八章的集合运算课堂笔记和练习让我们了解了集合运算的概念和用法,以及如何使用这些运算符来操作和查询数据库中的数据。这些知识对我们在实际应用中更高效地处理和分析数据具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值