2012-12-30 21 views
14

QuartzCoreを使用してボタンの色を変更できるカスタムUIButtonを作成するメソッドがあります。しかし、タッチされてもボタンは強調表示されません。カスタムUIButtonがタッチされても強調表示されない

- (UIButton *)makeHeaderButton { 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    UIFont *textFont = [UIFont boldSystemFontOfSize:12]; 
    UIColor *textColor = [UIColor colorWithRed:80/255.0 green:109/255.0 blue:145/255.0 alpha:1.0]; 
    UIColor *backgroundColor = [UIColor colorWithRed:250/255.0 green:250/255.0 blue:250/255.0 alpha:1.0]; 
    [button setTitleColor:textColor forState:UIControlStateNormal]; 
    button.titleLabel.font = textFont; 
    button.autoresizesSubviews = YES; 
    button.layer.cornerRadius = 8; 
    button.layer.borderWidth = 1; 
    // next 2 properties set using QuartzCore class, no other way to set button colors 
    button.layer.borderColor = [UIColor grayColor].CGColor; 
    button.layer.backgroundColor = backgroundColor.CGColor; 
    button.clipsToBounds = YES; 
    return button; 
} 

これらのボタンを通常の丸いボタンのようにハイライト表示させるにはどうすればよいですか?あなたのコードで

答えて

13

は、ストーリーボードでbutton.showsTouchWhenHighlighted = TRUE;

+1

だけ作るように見えますタイトルがフェードアウトしていきます。ボタンがタッチされると、ボタンの背景が青色に点滅します。 – Bob

+1

@Bobいつでもマニュアルの強調表示を設定できます。たとえば、イベントonTouchDown(またはそれが何であれ)に登録してから、実装で 'button.layer.backgroundColor = [UIColor BlueColor];のようにすると、' onTouchUp'が色を設定に戻します。 – Garrett

+5

Wowこれは複雑になりつつあります。私がしたいのは、カスタム背景色を持つRoundRectボタンを作ることだけです。確かにこれを行う簡単な方法があります。 – Bob

-4

は、ボタンの背景のデフォルトの画像を設定し、イメージを強調表示された行を追加します。ボタンアクションの書き込みに このラインすなわちカスタムボタンにハイライトを実装する簡単な方法があり、1秒

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]]; 
-1

のためのボタンの色を変更します。 1.ハイライト状態(色、アルファなど)の.pngイメージを作成します。 2. yourbutton.xibに移動します。 3. XCodeの右側のAttributes Inspectorを選択します。 4. State ConfigをHighlightedとして設定します。 5. .pngイメージを背景イメージとして設定します。 あなたを歓迎します:)

5

誰かが、まだ問題が発生した場合 - あなたは、このようにUIButtonを作成する必要があります。

UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem]; 

btn.layer.cornerRadius = 4; 
btn.layer.masksToBounds = YES; 

[btn setTranslatesAutoresizingMaskIntoConstraints:NO]; 

[btn setBackgroundColor:[UIColor greenColor]]; 
[btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; 

[btn setTitle:@"ok" forState:UIControlStateNormal]; 

*** any customisation that you would like *** 

[parentView addSubview: btn]; 

ので、この方法は、あなたはまだ、すべてのハイライトの世話をしてのiOSを持っています。主なものは、

[UIButton buttonWithType:UIButtonTypeSystem]; 

を使用しているあなたはinitWithFrameまたは任意の他の方法を使用する場合 - あなたはあなたがUIButtonの独自のサブクラスを作成することができます

setTitleColor: forState: 
setBackgroundImage: forState: 
+2

システムボタンとカスタムボタンの使用はキーです。ストーリーボードやNibにボタンが作成されていても、ボタン上の画像でカスタムボタンに変更されるため、手動で戻す必要があります。 –

2

を実装する必要があります(そして、あなたは、単に内のすべてのthosesのプロパティを設定しますコンストラクタ)。

そして、あなたはスウィフトについてはUIButton

- (void)setHighlighted:(BOOL)highlighted { 
    if (highlighted) { 
     self.backgroundColor = [UIColor redColor]; 
    } else { 
     self.backgroundColor = [UIColor blueColor]; 
    } 
} 
0

のハイライトのメソッドをオーバーライドする必要があり、UIButtonから継承し、isHighlightedプロパティをオーバーライドカスタムクラスを作成します。

class ButtonWithHighlight: UIButton { 

    override var isHighlighted: Bool { 
     get { 
      return super.isHighlighted 
     } 
     set { 
      if newValue { 
       backgroundColor = <#color when highlighted#> 
      } 
      else { 
       backgroundColor = <#color for normal state#> 
      } 
      super.isHighlighted = newValue 
     } 
    } 

} 
関連する問題