私はUIButtonを持っていて、このボタンはxibからサブビューをロードします。 すべてが細かく描画され、デリゲートメソッドが正しく呼び出されますが、ハイライト効果はありません。UIButton + XIBサブビュー=いいえハイライト
私はxibのすべてをuserInteractionEnabled = falseに設定しました。 これらのサブビューを削除すると、ハイライトエフェクトが再び機能します。
ご協力いただければ幸いです。
私はUIButtonを持っていて、このボタンはxibからサブビューをロードします。 すべてが細かく描画され、デリゲートメソッドが正しく呼び出されますが、ハイライト効果はありません。UIButton + XIBサブビュー=いいえハイライト
私はxibのすべてをuserInteractionEnabled = falseに設定しました。 これらのサブビューを削除すると、ハイライトエフェクトが再び機能します。
ご協力いただければ幸いです。
xibからロードしたビューをUIImageに変換して、代わりにそのイメージをUIButtonに追加することができます。ボタンが押されたときにハイライトが表示されます。この方法:
UIButton *button;
UIGraphicsBeginImageContext(viewFromXib.frame.size);
[viewFromXib.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[button setImage:image forState:UIControlStateNormal];
すべてのサブビューをイメージすることが起こる場合は、狂気の解決策があります:サブビューとして、複数のUIButtonsを作成して、一緒に彼らのハイライト/無効の状態を結びます。それらをすべてマスターボタンのサブビューとして追加し、ユーザー対話を無効にして、マスターボタンでK-Vオブザーバーを使用します。ここでは簡単な例です:
// Only perform the addObserver part if from a XIB
- (UIButton *) makeMasterButton {
// Create some buttons
UIButton *masterButton = [UIButton buttonWithType:UIButtonTypeCustom];
masterButtonFrame = CGRectMake(0,0,100,100);
UIButton *slaveButton1 = [UIButton buttonWithType:UIButtonTypeCustom];
slaveButton1.userInteractionEnabled = NO;
[slaveButton1 setImage:[UIImage imageNamed:@"Top.png"]];
slaveButton1.frame = CGRectMake(0, 0,100,50);
[masterButton addSubview:slaveButton1];
UIButton *slaveButton2 = [UIButton buttonWithType:UIButtonTypeCustom];
slaveButton2.userInteractionEnabled = NO;
[slaveButton2 setImage:[UIImage imageNamed:@"Bottom.png"]];
slaveButton2.frame = CGRectMake(0,50,100,50);
[masterButton addSubview:slaveButton2];
// Secret sauce: add a K-V observer
[masterButton addObserver:self forKeyPath:@"highlighted" options:(NSKeyValueObservingOptionNew) context:NULL];
[masterButton addObserver:self forKeyPath:@"enabled" options:(NSKeyValueObservingOptionNew) context:NULL];
return masterButton;
}
...
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([object isKindOfClass:[UIButton class]]) {
UIButton *button = (UIButton *)object;
for (id subview in button.subviews) {
if ([subview isKindOfClass:[UIButton class]]) {
UIButton *buttonSubview = (UIButton *) subview;
buttonSubview.highlighted = button.highlighted;
buttonSubview.enabled = button.enabled;
}
}
}
}
私はレイヤーを持っていたUIButtonための「画像」、透明性と動的にロードされたコンテンツを持っていると思ったとき、私は一度これをしなければなりませんでした。