textView的布局和点击事件

来源:互联网 发布:程序员都用github吗? 编辑:程序博客网 时间:2024/05/17 21:57


// - 设置 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 *childinself.subviews) {

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

    }

}



0 0