1

我想在我的 UITextView 中画线。经过一番研究,我发现了这一点:

UITextView 格线背景但线高错误

我在我的代码中试过,drawRect被调用但没有画线。有人可以帮我吗?

#import "FacebookViewController.h"
#import <QuartzCore/QuartzCore.h>

@interface MyViewController (){
UITextView *text;
}

@end

@implementation MyViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Do any additionnal customisation
}
return self;
}

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
text.contentMode = UIViewContentModeRedraw;
//TextView init
text = [[UITextView alloc]initWithFrame:CGRectMake(0,44,320,380)];
[self.view addSubview:text];
text.delegate = self;
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (void)drawRect:(CGRect)rect {
NSLog(@"TEST");
//Get the current drawing context
CGContextRef context = UIGraphicsGetCurrentContext();
//Set the line color and width
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetLineWidth(context, 1.0f);
//Start a new Path
CGContextBeginPath(context);

//Find the number of lines in our textView + add a bit more height to draw lines in the empty part of the view
NSUInteger numberOfLines = (text.contentSize.height + text.bounds.size.height) / text.font.leading;

//Set the line offset from the baseline. (I'm sure there's a concrete way to calculate this.)
CGFloat baselineOffset = 6.0f;

//iterate over numberOfLines and draw each line
for (int x = 0; x < numberOfLines; x++) {
    //0.5f offset lines up line with pixel boundary
    CGContextMoveToPoint(context, text.bounds.origin.x, text.font.leading*x + 0.5f + baselineOffset);
    CGContextAddLineToPoint(context, text.bounds.size.width, text.font.leading*x + 0.5f + baselineOffset);
}

CGContextClosePath(context);
CGContextStrokePath(context);
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
[text setNeedsDisplay];
}

@end

可能是一个愚蠢的错误,但我找不到

谢谢

4

3 回答 3

1

当我看着你的代码时,一切都很好。也许有颜色的东西?可能与背景颜色相同或类似的东西。

可能是您忘记设置内容模式:

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        self.contentMode = UIViewContentModeRedraw;
    }
    return self;
}

编辑:

我想我知道:你展示后忘记设置[myTextView setNeedsDisplay];了。在这里阅读

编辑:

首先你创建你的视图:

 t = [[[MyTextView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 200)] autorelease];
 [self.view addSubview:t];
 t.delegate = self;

使您的视图控制器实现UITextViewDelegate,然后

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    [t setNeedsDisplay];
}

这应该工作

于 2013-04-04T16:28:08.607 回答
1

我有同样的问题..因为我认为你不是 UITextView 的子类

由于 UIViewController 没有实现这个方法,只有 UITextView 实现了

所以只需子类化它..你的代码就可以了

于 2013-06-07T12:30:05.983 回答
0

是否有可能您绘制成功但被匹配的背景颜色遮挡?我注意到您选择的颜色的 alpha 非常小。如果只是为了排除这种情况,请更改:

CGContextSetStrokeColorWithColor(context, [UIColor colorWithWhite:0.5f alpha:0.15f].CGColor);

CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
于 2013-04-04T16:25:27.660 回答