2012-12-30 34 views
14

QuartzCore kullanarak düğmenin rengini değiştirmeme izin veren özel bir UIButton oluşturan bir yöntem var. Ancak düğmeler dokunduğunuzda vurgulanmaz.Özel UIButton işaretlendiğinde vurgulamıyor

- (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; 
} 

Bu düğmeler normal yuvarlak rect düğmesi gibi nasıl vurgulanabilir? Kodunuzda

cevap

13

, Film Şeridi 'in button.showsTouchWhenHighlighted = TRUE;

+1

sadece yapmak gibi görünüyor Başlık söner ve butona dokunduğunuzda buton arka planının mavi renkte yanıp sönmesini istiyorum. – Bob

+1

@Bob Her zaman manuel vurgulamayı ayarlayabilirsiniz. Örneğin: 'onTouchDown' (ya da her neyse) olayı için bir kayıt yapın ve daha sonra uygulamada 'button.layer.backgroundColor = [UIColor BlueColor] gibi bir şey yapın;' '' OnTouchUp' rengi ayarınıza geri döndürün – Garrett

+5

Vay Bu karmaşıklaşıyor. Tek istediğim, özel arka plan rengiyle RoundRect düğmesini yapmak. Elbette bunu yapmak için daha basit bir yol var. – Bob

-4

düğmesi arka plan varsayılan resmi ayarlayabilir ve görüntü vurgulanan satırı ekleyin. Düğme eylemi bu hat, yani özel düğme üzerine parlaklık uygulanması kolay bir yolu yoktur 1 saniye

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

için düğmeye rengini değiştirmek yazın. 1. Vurgulama durumu için .png resmi oluşturun (renk, alfa vb. Ile); 2. yourbutton.xib adresine gidin; 3. XCode'un sağındaki Nitelikler Denetçisini seçin; 4. Durum Yapılandırmasını Vurgulanan olarak ayarla 5. Arka plan resmi olarak .png resmi ayarlayın. Birisi hala sorunla karşılaşırsa Sen

5

:) bekliyoruz - böyle UIButton oluşturmalısınız:

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]; 

Yani bu yolu hala tüm vurgulama bakımı iOS var. Eğer sen UIButton kendi alt sınıfı (o zaman sadece tüm Thoses özellikleri ayarlanır oluşturabilir

setTitleColor: forState: 
setBackgroundImage: forState: 
+2

Bir System butonu ile Custom butonu arasında bir düğme var: Düğme bir Storyboard veya Nib üzerinde oluşturulmuş olsa bile IB'de Düğmedeki görüntü özel bir düğmeyle değiştirir, bu nedenle manuel olarak değiştirmeniz gerekir. –

2

uygulamak zorunda kalacak - Ana şey initWithFrame veya başka bir yöntemi kullanırsanız

[UIButton buttonWithType:UIButtonTypeSystem]; 

kullanıyor kurucu).

Ve sen Swift için UIButton

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

vurgulamak yöntemini geçersiz UIButton devraldığı özel bir sınıf oluşturmak ve isHighlighted özelliğini geçersiz kılmalıdır:

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 
     } 
    } 

}