0

我有一个用于占位符和背景图像的子类 UITextView。

这是代码

BKCUTextView.h

#import <UIKit/UIKit.h>

@interface BKCUTextView : UITextView
- (void)setPlaceholder:(NSString *)placeholder;
- (void)setPlaceholderColor:(UIColor *)placeholderColor;
- (void)setBackgroundImage:(UIImage *)img;
@end

BKCUTextView.m

#import "BKCUTextView.h"
@interface BKCUTextView()
{
    NSString    * _placeholder;
    UIColor     * _normalColor;
    UIColor     * _placeholderColor;
    BOOL        _needToShowPlaceholder;
    UIImageView * _bgImageView;
}
@end

@implementation BKCUTextView

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

- (void)drawRect:(CGRect)rect
{
    if(_needToShowPlaceholder)   {   [_placeholder drawAtPoint:CGPointMake(0, 0) withFont:self.font];    }
}

- (void)setTextColor:(UIColor *)textColor
{
    _normalColor = textColor;
}

- (void)setPlaceholderColor:(UIColor *)placeholderColor
{
    _placeholderColor = placeholderColor;
}

- (void)setPlaceholder:(NSString *)placeholder
{
    _needToShowPlaceholder = YES;
    _placeholder = placeholder;
}

-(void)setBackgroundImage:(UIImage *)img
{
    if(_bgImageView == nil)
    {
        _bgImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
        [self addSubview:_bgImageView];
        [self sendSubviewToBack:_bgImageView];
        [self bringSubviewToFront:self];
    }
    [_bgImageView setImage:img];
}

- (void)_initEvents
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_textChanged:) name:UITextViewTextDidChangeNotification object:self];
}

-(void)_textChanged:(NSNotification *)noti
{
    _needToShowPlaceholder = (self.text.length == 0);
    if(_needToShowPlaceholder)  {   self.textColor = _placeholderColor; }
    else                        {   self.textColor = _normalColor;      }
    [self setNeedsDisplay];
}

实例

BKCUTextView * tv = [[BKCUTextView alloc] initWithFrame:CGRectMake(5, 55, 300, 50)];
[tv setBackgroundColor:[UIColor darkGrayColor]];
[tv setTextColor:[UIColor whiteColor]];
[tv setPlaceholderColor:[UIColor grayColor]];
[tv setPlaceholder:@"placeholder here!"];
[tv setBackgroundImage:[UIImage imageNamed:@"btn_coin_prs.png"]];
[self.view addSubview:tv];

[self.view bringSubviewToFront:tv];

每个属性 - backgroundImage 和 placeholderText - 工作正常,但是当我将它们设置在一起时,占位符被绘制在 backgroundImage 下。

如何将文字放在背面图像上方?

4

1 回答 1

0

试试这个方法[self bringSubviewToFront:];

希望它会有所帮助!

于 2013-09-02T07:01:58.917 回答