制作iOS搜索应用 搜索结果关键词高亮不同样式

来源:互联网 发布:钢铁力量满级s狐狸数据 编辑:程序博客网 时间:2024/06/11 17:56

根据公司要求

老大分配我任务 实现应用中搜索结果实现关键词高亮效果,最初以为很好做,因为之前根据网上资料模仿写了个之定义UILabel 确实很快就实现了,提交给测试的 测试。真心佩服测试人员啊。各种bug偷偷溜走  然后被他们逮到 。最后的结果无法显示系统表情。后来才醒觉。那个自定义UILabel 最后形成一张图片 对表情就文法显示出来了。所以我蛋疼了。 没办法任务就是任务,我就问老大这该怎么做啊,一句让我懂了  这就是你进步的机会了。好吧 

默默的找资料。坑爹啊 没有既然。收到就是Android的。以前很喜欢前端 在大学时做的也是前端  最近在研究WORDPRESS后来我突然想到了UIWebView 控件来实现。

首先说说的实现吧。通过搜索能得到搜索的关键字符串 (keyStr) 通过keyStr搜索得到返回结果array;其中array中有相关搜索结果对象,展现到tableview中去入下图

关键要实现不同效果。

1.将关键字符串截取为单个字符 保存在一个数组中 相同的就不加入array1;

2,将返回结果同样截取为单个保存在一个数组中 都保存array2;

3,拼接HTML :用array2对象和单个和array1中所有对象比较是否相同,如果相同就拼接为 

<font color=red>%@</font>添加 一个字符串中 如果不相同就直接添加一个字符串后面 最后就得到我们要的HTML 字符串了;

4。为了解决uiwebview中一个显示问题 文字在uiwebview 会里空间(0,0)有一段距离很难看并且不好计算后面的空间自适应宽度。所以在这段HTML字符串中又嵌套了

<p style=\"margin-top:-10px;margin-left:-7px; padding:0\" >%@</p> 用于解决 间距问题。

5.最后一定会很焦虑的是 我点击tableview中的CELL 时候 会出现一块白色的矩形 这就是WebView 位置大小 没有根cell一起改变颜色。期初我 也纳闷啊,webview我背景都设置为透明的了。 后来网上找了好久为什么呢?一个小小帖子就那么短短的不起眼的一个属性,解决我致命的问题

[_userNameSearchView setOpaque:NO];  (透明了就这样)。

下面附上代码  能力有限我知道很丑  

控制器的代码:

//是否开启电话号码、昵称等搜索功能

- (BOOL)isOpenMoreModeSearchFunction

{

    returnYES;//此搜素开关暂时不用,搜索功能确定打开 added by zhoukai 2014-11-17

}


//判断是不是小写字母

- (BOOL)isLowerLetter:(NSString *)str

{

    if ([str characterAtIndex:0] >='a' && [str characterAtIndex:0] <='z') {

        return YES;

    }

    return NO;

}


//判断是不是大写字母

- (BOOL)isCatipalLetter:(NSString *)str

{

    if ([str characterAtIndex:0] >='A' && [str characterAtIndex:0] <='Z') {

        return YES;

    }

    return NO;

}



//将搜索得到的结果变为一个个字符 组成数组

- (NSMutableArray *)strChangeArray:(NSString *)contentStr

{

    NSString *tempStr = [NSString stringWithFormat:@"%@",contentStr];

    NSMutableArray *tempArry = [NSMutableArray array];

    for (int i = 0; i < contentStr.length; i++) {

        NSString *str = [NSString stringWithFormat:@"%@",[tempStr substringWithRange:NSMakeRange(0,1)]];

        [tempArry addObject:str];

        tempStr = [tempStr substringFromIndex:1];

    }

    return tempArry;

}


//根据关键字数组 拼接HTML字符串

- (NSString *)stringChangeHtmlByArray:(NSArray *)array withString:(NSString *)str

{

    NSString *htmlStr = nil;

    BOOL firstTag = YES;

    for (NSString *keyStr in [self strChangeArray:str]) {

        if ([array containsObject:keyStr]) {

            if (firstTag) {

                firstTag = NO;

                htmlStr = [NSString stringWithFormat:kTitleStringHtml,keyStr];

            } else {

                htmlStr = [htmlStr stringByAppendingString:[NSString stringWithFormat:kTitleStringHtml,keyStr]];

            }

        } else {

            if (firstTag) {

                firstTag = NO;

                htmlStr = keyStr;

            } else {

                htmlStr = [htmlStr stringByAppendingString:[NSString stringWithFormat:@"%@",keyStr]];

            }

        }

    }

    return htmlStr;

}



这是cell 中的代码

//检查是否和数组数据重复 如果不相同加入数组

- (void)isJoinKeyArray:(NSString *)string

{

    if (![keyArray containsObject:string]) {

        [keyArray addObject:string];

    }

}


//将关键字符串 变为关键字符数组

- (void)keysChangeKeyArray:(NSString *)keyStr

{

    [keyArray removeAllObjects];

    NSString *tempStr = [NSString stringWithFormat:@"%@",keyStr];

    for (int i = 0; i < keyStr.length; i++) {

        NSString *str = [NSString stringWithFormat:@"%@",[tempStr substringWithRange:NSMakeRange(0,1)]];

        //小写

        if ([GET_SINGLETON_FOR_CLASS(SearchManager) isLowerLetter:str]) {

            [self isJoinKeyArray:str.uppercaseString];

        }

        //大写

        if ([GET_SINGLETON_FOR_CLASS(SearchManager) isCatipalLetter:str]) {

            [self isJoinKeyArray:str.lowercaseString];

        }

        [self isJoinKeyArray:str];

        tempStr = [tempStr substringFromIndex:1];

    }

}




//要显示的地方

 _userNameSearchView = [[UIWebView alloc]init];

        [_userNameSearchView.scrollView setShowsVerticalScrollIndicator:NO];

        [_userNameSearchView.scrollView setShowsHorizontalScrollIndicator:NO];

        [_userNameSearchView.scrollView setScrollEnabled:NO];

        _userNameSearchView.backgroundColor = [UIColor clearColor];

        _userNameSearchView.scrollView.backgroundColor = [UIColor clearColor];

        _userNameSearchView.userInteractionEnabled = NO;

        [_userNameSearchView setOpaque:NO];

        [self.contentView addSubview:_userNameSearchView];


NSString *htmlStr = [GET_SINGLETON_FOR_CLASS(SearchManager) stringChangeHtmlByArray:keyArray withString:chatRoomInfo.roomName];

    NSString *htmlStrP = [NSString stringWithFormat:kTitleStringHtmlPeriod,htmlStr];

    CGSize size;

    size = [chatRoomInfo.roomName sizeWithFont:[UIFont systemFontOfSize:16.0f]];

    [_userNameSearchView loadHTMLString:htmlStrP baseURL:nil];

    _userNameSearchView.frame = CGRectMake(kAvatarHeadViewX + kAvatarHeadViewW +10, kUserNameSpace, size.width, 18);






0 0
原创粉丝点击