デフォルトのUIButton
画像と、ハイライト/選択した画像用の別の画像があります。ボタンを押すと、ボタンの画像が強調表示され、タッチアップが内側にある場合は選択された画像に変わります。通常のもの..IB内のすべてのセットアップ。
ただし、非常にトリッキーな場所(位置合わせされていない、ハードコーディングされていない)で、ボタンの上にラベルを設定しようとしています。
IBのボタンにラベルを付けてみました。問題:ボタンの制御状態が変化すると、ラベルのテキストの色を変更する必要があります。
そこで、UIButton
サブクラスを作成し、UILabel
Outletを追加し、次のメソッドをオーバーライドしました。
- (void)touchesBegan/Moved/Cancelled/Ended:...;
- (void)setSelected:...
やりたいことができました…でも!ボタンをすばやくクリックしても、変更は反映されません。時々それは正しく動作しません...私は非同期呼び出しさえ使用しました...使用しません。
UIButton
それで、私は'sに向かいましたtitleLabel
。運が悪かったので使ってみました。
だから、私は試しましUIButton setTitle: forState:
た、役に立たない...助けて?
追加の詳細:
-(id)initWithCoder:(NSCoder *)aDecoder { self = [super initWithCoder:aDecoder]; if(self){ [self.titleLabel setFrame:CGRectMake(0、0、100、100)]; [self.titleLabel setText:@ "THE TITLE LABEL"]; [self.titleLabel setHidden:NO]; [self.imageView setAlpha:0.2f]; NSLog(@ "%@"、self.subviews); [self setTitle:@ "DEFAULT !!" forState:UIControlStateNormal]; } 自己を返す; } -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; [self PerformSelector:@selector(check)withObject:nil afterDelay:0.1]; } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesMoved:touches withEvent:event]; [self PerformSelector:@selector(check)withObject:nil afterDelay:0.1]; } -(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesCancelled:touches withEvent:event]; [self PerformSelector:@selector(check)withObject:nil afterDelay:0.1]; } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesEnded:touches withEvent:event]; [self PerformSelector:@selector(check)withObject:nil afterDelay:0.1]; } -(void)setSelected:(BOOL)selected { [スーパーsetSelected:selected]; [self PerformSelector:@selector(check)withObject:nil afterDelay:0.1]; } -(void)チェック{ if(self.isSelected || self.state == UIControlStateHighlighted || self.state == UIControlStateSelected){ [_label setHighlighted:YES]; } そうしないと { [_label setHighlighted:NO]; } }
出力:
(
"<UIImageView: 0x8b24930; frame = (0 0; 243 39); clipsToBounds = YES; alpha = 0.2; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x8b248e0>>",
"<UIButtonLabel: 0x8b247a0; frame = (0 0; 100 100); text = 'THE TITLE LABEL'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x8b25000>>"
)