0

のサブクラスがUITextFieldあり、不透明なサブビューを追加しようとしています。ただし、を入力するとUITextField、透明に見え、ビューの背後にテキストが表示されます。ビューを完全に不透明にするにはどうすればよいですか?サブクラスを初期化してビューを追加するコードは次のとおりです。

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
       _dropdownIcon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ab- dropdown-on"]];     
        dropdownIcon.backgroundColor = [UIColor blackColor];
       _dropdownIcon.frame = CGRectMake(self.frame.size.width-DROPDOWN_ICON_SIZE,0,DROPDOWN_ICON_SIZE,DROPDOWN_ICON_SIZE);
       [self addSubview:_dropdownIcon];
   }
    return self;
}

これは私が得るものです

4

1 に答える 1

2

サブクラスは、-textRectForBounds:テキストを描画する実際の領域を返すためにメソッドをオーバーライドする必要があります。

- (CGRect)textRectForBounds:(CGRect)bounds
{
    CGRect textRect = [super textRectForBounds:bounds];
    textRect.size.width -= 30; // or however wide your control is—play with this value
    return textRect;
}

表示されているのは、アイコンが不透明ではないことではありません。テキストフィールドはアイコンがそこにあることを「認識」していないため、テキストはその上に描画されているだけです。

rightViewプロパティと関連する-rightViewRectForBounds:メソッドを調べることもできますが、これらは、テキストフィールドでアクセサリビューを自動的に表示および非表示にする場合に最も役立ちます。

于 2013-02-19T15:49:36.540 に答える