ERMAO

  • HOME
  • ABOUT
  • ARCHIVES

tableView的Header刷新问题

Posted on 2018-09-30

遇到的问题

  • 一般刷新tableView的时候,执行
    [self.tableView reloadData]
    会刷新table表单里面的所有数据
  • 但是在项目中,难免遇到一种需求:如下图

    在图片中,上面是headerView,下面是cell,在点击按钮的时候,改变下面数据源,但是上面的按钮有选中状态,默认是选中一个按钮的,假如默认选中第一个按钮,在点击第二个按钮的时候刷新tableView,第一个按钮也会变成选中状态。
  • 出现这种情况的原因可能是:

1.在设置按钮单选的时候,tag值搞错了。

2.在设置tableView的headerView的时候,是用代理方法设置的,执行[self.tableView reloadData]的时候,又走了一遍代理方法,给headerView中的按钮重新赋值了。如下:

1
2
3
4
5
6
7
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
SQSignInHeaderView *view = [tableView dequeueReusableHeaderFooterViewWithIdentifier:NSStringFromClass(SQSignInHeaderView.class)];
view.delegate = self;
[view setDetailModel:_signInDetail];
[view setCurrentMonthDays:_percentViewWidth];
return view;
}

解决办法

  • 1.修改按钮的tag值。
1
2
3
4
5
6
7
8
9
10
- (void)buttonClicked:(UIButton *)sender{
for (int i = 0, i < 3, i++){
if (sender.tag == i){
sender.selected = YES;
continu;
}
UIButton *btn = (UIButton *)[self.view viewForTag:i];
btn.selected = NO;
}
}
  • 2.不使用UITabelViewHeaderFooterView给tableView设置头部视图,使用UIView,然后再控制器中懒加载headerView
  • SQSignInModel.h

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #import <UIKit/UIKit.h>
    #import "SQSignInModel.h"

    @protocol SignInHeaderViewDelegate<NSObject>
    - (void)actionOnSignInButton:(UIButton *)button;
    - (void)actionOnGiftButton:(UIButton *)button;
    @end
    //创建一个继承自UIView的headerView
    @interface SQSignInHeaderView : UIView
    proModel(SQDetailSignInModel, detailModel);
    proInteger(currentMonthDays);
    @property (nonatomic, assign) id<SignInHeaderViewDelegate> delegate;
    proModel(SQSignInReachModel, reachModel);
    + (instancetype)headerView;
    @end
  • 在控制器中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    //懒加载headerView
    - (SQSignInHeaderView *)signInHeaderView {
    if (!_signInHeaderView) {
    self.signInHeaderView = ({
    SQSignInHeaderView *view = [SQSignInHeaderView headerView];
    view.delegate = self;
    view;
    });
    }
    return _signInHeaderView;
    }
    //懒加载tableView
    - (UITableView *)signInTabelView {
    if (!_signInTabelView) {
    self.signInTabelView = ({
    UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_SIZE.width, SCREEN_SIZE.height-MC_NavHeight-MC_TabbarSafeBottomMargin) style:UITableViewStyleGrouped];
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    tableView.backgroundColor = [UIColor whiteColor];
    tableView.rowHeight = 92*DHFlexibleHorizontalMutiplier();
    tableView.delegate = self;
    tableView.dataSource = self;
    tableView.tableHeaderView = self.signInHeaderView;
    tableView;
    });
    }
    return _signInTabelView;
    }
  • 在加载tableView的时候,通过以下方法给tableView设置头部视图:
    tableView.tableHeaderView = self.signInHeaderView;

  • 在执行[self.tableView reloadData]的时候,就不会在创建一次headerView了。

使用WKWebView加载Html5文本,修改文本行间距以及字体颜色、大小等

Posted on 2018-09-30
  • 在使用WKWebView加载Html文本的时候,需要引入头文件
    #import <WebKit/WebKit.h>
  • 创建WKWebView,修改行间距只能通过这种方式修改(目前已知)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    - (WKWebView *)webView {
    if (!_webView) {
    self.webView = ({
    WKWebView *web = [[WKWebView alloc] initWithFrame:CGRectMake(10*DHFlexibleHorizontalMutiplier(), 97*DHFlexibleHorizontalMutiplier(), 297*DHFlexibleHorizontalMutiplier(), 309*DHFlexibleHorizontalMutiplier())];

    NSString *str = [NSString stringWithFormat:@"<div style=\"line-height: 30px\">%@",_rule];

    [web loadHTMLString:str baseURL:nil];
    web.scrollView.showsVerticalScrollIndicator = NO;
    web.scrollView.bounces = NO;
    web.navigationDelegate = self;
    for (UIView *view in web.subviews) {
    NSLog(@"%@",view);
    }
    web;
    });
    }
    return _webView;
    }
  • 关键代码
    1
    NSString *str = [NSString stringWithFormat:@"<div style=\"line-height: 30px\">%@",_rule];

这句代码在拼接的时候需要“\”转义,源代码为
<div style="line-height: 30px">

  • 修改文本的字体和颜色
    在代理方法中
    1
    2
    3
    4
    5
    6
    - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
    //修改字体大小
    [ webView evaluateJavaScript:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '300%'"completionHandler:nil];
    //修改字体颜色
    [ webView evaluateJavaScript:@"document.getElementsByTagName('body')[0].style.webkitTextFillColor= '#999999'"completionHandler:nil];
    }
  • 300%—字体大小,#999999—颜色

行走在“社会底层”之间的脚步

Posted on 2018-05-30

小记

我是一个不太标准的IT男,不是科班出身、没有牛逼的技术、没有深厚的家底,但是我也是一个不愿意走下坡路的人。
2018年5月21日下午16点55分,我像往常一样,开车去接我女朋友下班,从租房子的小区开车到她上班的地方,最多10分钟。天气炎热,心里很燥。
从临时车位把车开出来,我跟着前面一辆运货的金杯车,朝着小区门口驶去。这时,前面金杯车突然停车,倒车灯亮了,我马上刹车打喇叭,“滴~滴滴~~”,只听见砰的一声,金杯车撞上了我的车前脸。着实给我吓了一跳,倒车给的那一脚油很大,因为金杯车很旧,是送油漆的,目测有5年以上驾龄了。
车停下之后,我熄火下车,点燃一支烟,完全一副地痞的样子指着前面车司机就开始吼:“你特么怎么开的车?怎么拿的驾照?倒车不看后视镜?不看后面有没有来车?”。金杯车司机没有说话,下来看了看两车相撞的地方,抬头望着我,估计也是给吓着了,一个劲儿地给我道歉。“那现在怎么办?”我不太好意思再吼他了,因为我刚刚下车对他那一顿吼,他也没有说话。而且小伙子目测二十七、八岁,一身、一裤子都是油漆,样子看着很老实。“该怎么处理怎么处理吧,该赔钱就赔钱吧,我报保险吧。”,“行吧”,我回道。
小伙子在一旁打保险公司电话,我坐在小区公共椅子上面等着他,他打完电话过来又给我发烟,感觉很担心的样子。我坐在一旁,也不知道说什么,我也没有一直说他,因为事情已经出了,说再多也没用,别人都说了该咋办就咋办,也没有必要去为难别人了。不过看他担心的样子,我还是劝了他几句,让他不要担心,没什么大事,我也不会讹他。
没一会我女朋友回来了,因为撞车之后我就跟他说让他自己回来。他回来之后,我们俩问了4S店和他爸怎么处理,最后商量好还是第二天去处理。
像我们这种交通事故,属于轻微交通事故,可以自行去所在区的轻微事故快速处理中心(简称:快处中心)处理。正巧那天试星期天,又到了下班的时候了,他就说那星期一去处理吧,但是我周一到周五很忙,没有时间,后来没有办法,我只能请了半天假。当天就草草完事,他陪我们把车开到4S店,由于我电话没有电,就留了我女朋友的手机号就各自回家了,约好第二天早上9点去处理。
第二天一早,8点过小伙子就打电话给我女朋友了,我女朋友跟我说的小伙子打电话给她,“姐,让你老公接下电话吧。”其实我们还没有结婚,我女朋友后来在给我说,听见小伙子这么说她快笑死了。接着我给他打电话,然后约好在快出中心见面。
我是9点10分到的快处中心,他已经早早等在那里了。于是进去办理手续,填表-交警定责-事故录入......等等一系列程序。小伙子跑前跑后,俨然一个做错事的小孩子的样子。现在科技发达,事故录入是负责方在手机上下载App,在网上自己提交事故,因为我是写App的,对这些很敏感,所以小伙子在注册的时候,我就在一旁看着了。
我想,这不是偶然。
在小伙子设置密码的时候,我看见了他的密码,密码是:babamama520。没错,我看到的不止是这串密码,有小伙子的填满污垢的指甲、有一身油漆的衣服和裤子、有奔波于城市各个角落晒出的肤色、和蓬头垢面的面容。一个在外面奔波的小伙子,不怕风吹日晒,霜打雨淋,竟然怀着对父母或者是子女这样的心情,我当时很心酸,这就是一个淳朴的社会底层劳动人民的心怀。我当时就想着不让他赔了,但是他跟我说他是公司的车,费用由公司承担,让我不用担心。而我,也不是什么有钱人,我也一时拿不出那么多钱来修车。可能他还不知道,我被他那一串密码给感动了。最后办完走的时候,他还一个劲儿的给我道歉。
换言之,在这个琳琅满目、高楼林立的21世纪新社会,处处是高科技的宣传和体现,现在的人们可以在家里就办完自己以前一定要出门才能办的事,比如说购物、外卖。人们在不断的被满足之后,放眼的是更好、更有技术含量、更高大的科技感,谁会往之前看一看啊?看一看在社会底层为我们服务的工作者们,看一看他们的生活,我们不必去向他们施舍什么,不必去向他们刻意献出自己的爱心,我们之需要在他们工作之后,认可他们的付出,不去故意给他们一个差评。
在现在这个社会中,这样的工作者不在少数,像在工地上上班的工作者们,维护城市干净整洁的工作者们,他们都是战斗在第一线,为我们美好的生活奋斗在一线的人们,对,他们就是最可爱的那些人。我记得之前在网上看见过一张照片,一个农名工在地铁上,不愿意坐在作为上,坐在了地上。发这张图的网友并没有称他为农名工,而是在工地上工作的大叔,我为我们当中有这样能理解别人的人感到非常的骄傲。是的,不管是他们还是我们,都是靠自己的双手吃饭。没有谁比谁高一等,也没有谁比谁低一等,只是从事的工作不一样而已。所以,对于那些混吃等死的人,我只想问你一句,你有什么理由不好好上班?好好生活?好好奋斗?
晚上回家,小伙子输密码的场景一直在我眼前浮现,我一直在想,要是他公司因为这个事情惩罚他,怎么办?而我又没有这个能力帮助他?
想到这些,觉得自己一定要努力,多帮帮他们。因为这件事情,对我是一种成长,对我有很大的影响,可能会影响我的一生,我的人生观,我的世界观,不过,我很欣慰我能有这些改变。
我想,这是注定吧。
ERMAO

ERMAO

3 posts
© 2018 ERMAO
本站访客数:
|
Powered by Ermao