2016-10-12 4 views
1

UIViewControllerには、customの複数のUIButtonが含まれています。新しいビューコントローラが表示されたり、他のビューが追加されたりするなど、自分のビューがフォーカスを失った場合、カスタムボタンを自動的にグレーアウト(無効化)するにはどうすればよいですか?UIAlertControllerが画面をカバーしているときに、カスタムタイプのUIButtonを自動的に無効にする

基本的には、タッチを受信できないボタンをグレーアウトしたいので、ユーザーのフォーカスは画面上のインタラクティブな要素にのみあります。

ボタン画像に非モノクロ画像を設定したいので、システムでボタンタイプを使用しません。あなたにアンタッチャブルボタンをしたい場合は

screenshot

+0

コードまたはスクリーンショットを表示してください。 –

+0

異なる種類のソリューションを探しているのでなければ、警告を表示する前にボタンを 'button.userInteractionEnabled = false'に設定するだけでよいのです。 –

+0

オーバービューのviewControllerが背景全体をグレーアウトするのに十分ではありませんか? – zisoft

答えて

0

UIAlertControllerが表示されると、ウィンドウの色合いが変わります。そのため、非カスタムボタンは淡色表示になっています。これらの標準色と薄暗い色はtintColorプロパティから取得されます。カスタムボタンの場合は、あなたはtintColorDidChangeメソッドオーバーライドすることができます。

class CustomButton: UIButton { 

    override func tintColorDidChange() { 
     if tintAdjustmentMode == .dimmed { 
      // modify subviews to look disabled 
     } else { 
      // modify subviews to look enabled 
     } 
    } 

} 

をしかし、あなたのイメージはただ一つの色を持っているようなあなたの場合にはそれが見えます。それが簡単にできる理由です。レンダリングモードUIImageRenderingMode.alwaysTemplateでボタンの画像をロードし、ボタンのtintColorを画像の色と同じにするだけです。その後、すべて自動的に行われます。画像をテンプレートモードでレンダリングすること作る

は、Xcodeの enter image description here

またはプログラムoriginalImage.withRenderingMode(.alwaysTemplate)元の画像からそれを得るの助けを借りてpssibleです。

+0

ヒントのためにありがとう:__WAlertControllerがこれを表示すると、ウィンドウの濃淡を変更します。これは役に立ちます。 – Srinidhi

+0

ようこそ。 – Silmaril

0

あなたは

button.enabled = false ; button.userInteractionEnabled = false

UIAlertViewController

提示した後、あなたのUIAlertViewControllerと

button.enabled = true ; button.userInteractionEnabled = true

を提示する前に使用することができます

ともあなたはボタンの色を変更したい場合は、あなたの選択あなたは次のコードを使用することができます

+0

これは私の画面のすべてのカスタムボタンと、私のビューが応答しなくなり、一貫性を保つために必要なすべての場合に必要なことです。私はコーディングするすべてのビューコントローラで行う必要があります。私は一般的な解決策を探しています。 – Srinidhi

1

に応じ

[btn setBackgroundImage:[UIImage imageNamed:@"your gray image"] forState:UIControlStateSelected]; 

または

[btn setBackgroundImage:[UIImage imageNamed:@"your gray image"] forState:UIControlStateHighlighted];

を使用することができます。

NSArray *subviews = [self.view subviews]; 
for (UIView *v in subviews) { 
    if ([v isKindOfClass:[UIButton class]]) 
    { 
     UIButton *button = (UIButton *) v; 
     [button setEnabled:NO]; 
     [button setAlpha:0.5]; 
    } 
} 

このコードは、現在のビューですべてのUIButtonを無効にします。 Alertviewが終了したときにボタンを再び有効にすることができます。

これが役立ちますように!