1

如何在 a 中绘制进度条UITextField?到目前为止,我已经测试了两种方法。

1. 添加一个UIProgressView对象作为对象的子视图UITextField

UIProgressView* progressView = [[UIProgressView alloc] init];
[aUITextField addSubview:progressView];
progressView.progress = 0.5;
[progressView release];

2.子类UITextfield和覆盖drawRect:

- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        // Initialization code
        [self setBackgroundColor:[UIColor clearColor]];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    // Drawing code
    [[UIColor orangeColor] setFill];
    [[UIBezierPath bezierPathWithOvalInRect:rect] fill];
}

两种方法都不起作用。你觉得这些方法有什么问题吗?我怎样才能做到这一点?

4

3 回答 3

2

我不确定添加UIProgressView作为UITextField对象的子视图是否有用,因为您无法更改进度视图的框架。

子类化似乎是正确的方法。这是我能想到的。检查它是否对您有用。

进度字段.h

@interface ProgressField : UITextField {

}

@property (nonatomic, assign) CGFloat progress;
@property (nonatomic, retain) UIColor * progressColor;

@end

进度字段.m

@implementation ProgressField
@synthesize progress;
@synthesize progressColor;

- (void)setProgress:(CGFloat)aProgress {
    if ( aProgress < 0.0 || aProgress > 1.0 ) {
        return;
    }

    progress = aProgress;

    CGRect progressRect = CGRectZero;
    CGSize progressSize = CGSizeMake(progress * CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds));
    progressRect.size = progressSize;

    // Create the background image
    UIGraphicsBeginImageContext(self.bounds.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [UIColor clearColor].CGColor);
    CGContextFillRect(context, self.bounds);

    CGContextSetFillColorWithColor(context, [self progressColor].CGColor);
    CGContextFillRect(context, progressRect);

    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [super setBackground:image];
}

- (void)setBackground:(UIImage *)background {
    // NO-OP
}

- (UIImage *)background {
    return nil;
}

- (id)initWithFrame:(CGRect)frame {
    if ((self = [super initWithFrame:frame])) {
        [self setBorderStyle:UITextBorderStyleBezel];
    }
    return self;
}

这似乎不适用于设置为UITextFields 的 s 。borderStyleUITextBorderStyleRoundedRect

于 2011-06-11T12:29:35.530 回答
1
UIProgressView* progressView = [[UIProgressView alloc] init];
progressView.frame = aUITextField.frame;// you can give even set the frame of your own using CGRectMake();
[aUITextField addSubview:progressView];
progressView.progress = 0.5;
[progressView release];

设置进度视图的框架。

于 2011-06-11T11:59:45.390 回答
0

在这里,我认为您必须将 progressView 作为子视图添加到 self.view ,只需根据适合 UITextField 的大小设置 progressView 的框架,并将 progressview 的设置中心设置为 UITextField 的中心。希望它会帮助你。

于 2011-06-11T11:58:37.987 回答