关闭

textView的布局和点击事件

708人阅读 评论(0) 收藏 举报
分类:


// - 设置 textView 不可以编辑

        textView.editable =NO;


// - 设置文字的内边距

        textView.textContainerInset =UIEdgeInsetsMake(0, -5,0, -5);

// - 设置 textView 不可以滚动

        textView.scrollEnabled =NO;


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

    // 触摸对象

    UITouch *touch = [touches anyObject];

    

    // 触摸点

    CGPoint point = [touch locationInView:self];

    

    NSArray *specials = [self.attributedTextattribute:@"specials"atIndex:0effectiveRange:NULL];

    BOOL contains = NO;

    

    for (HWSpecial *specialin specials) {

        self.selectedRange = special.range;

        // self.selectedRange --影响--> self.selectedTextRange

        // 获得选中范围的矩形框

        NSArray *rects = [selfselectionRectsForRange:self.selectedTextRange];

        // 清空选中范围

        self.selectedRange =NSMakeRange(0,0);

        

        for (UITextSelectionRect *selectionRectin rects) {

            CGRect rect = selectionRect.rect;

            if (rect.size.width ==0 || rect.size.height ==0) continue;

            

            if (CGRectContainsPoint(rect, point)) {// 点中了某个特殊字符串

                contains = YES;

                break;

            }

        }

        

        if (contains) {

            for (UITextSelectionRect *selectionRectin rects) {

                CGRect rect = selectionRect.rect;

                if (rect.size.width ==0 || rect.size.height ==0) continue;

                

                UIView *cover = [[UIViewalloc] init];

                cover.backgroundColor = [UIColorgreenColor];

                cover.frame = rect;

                cover.tag = HWStatusTextViewCoverTag;

                cover.layer.cornerRadius =5;

                [self insertSubview:cover atIndex:0];

            }

            

            break;

        }

    }

    

    // 在被触摸的特殊字符串后面显示一段高亮的背景

}


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{

        [self touchesCancelled:toucheswithEvent:event];

    });

}


- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

{

    // 去掉特殊字符串后面的高亮背景

    for (UIView *childin self.subviews) {

        if (child.tag ==HWStatusTextViewCoverTag) [child removeFromSuperview];

    }

}



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:93781次
    • 积分:2924
    • 等级:
    • 排名:第13319名
    • 原创:207篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条