iOS'ta düğme metnini değiştir ve düğmeyi devre dışı bırak


107

İOS'ta düğmenin metnini nasıl değiştirir ve bir düğmeyi devre dışı bırakırsınız?

Yanıtlar:


208

Hey Namratha, Bir UIB düğmesinin metnini ve etkin / devre dışı durumunu değiştirmek hakkında soru soruyorsanız, aşağıdaki gibi oldukça kolay bir şekilde yapılabilir;

[myButton setTitle:@"Normal State Title" forState:UIControlStateNormal]; // To set the title
[myButton setEnabled:NO]; // To toggle enabled / disabled

Arabirim Oluşturucu'da düğmeleri oluşturduysanız ve bunlara kodda erişmek istiyorsanız, IBActionçağrılara bir argüman olarak aktarılmalarından yararlanabilirsiniz :

- (IBAction) triggerActionWithSender: (id) sender;

Bu düğmeye bağlanabilir senderve eylem tetiklendiğinde düğmeyi argümanda alırsınız . Bu yeterli değilse (çünkü düğmelere eylemler dışında bir yerden erişmeniz gerektiğinden), düğme için bir çıkış belirtin:

@property(retain) IBOutlet UIButton *someButton;

Daha sonra IB'deki düğmeyi kontrolöre bağlamak mümkündür, NIB yükleme kodu arabirimi yüklerken özellik değerini ayarlayacaktır.


Teşekkür ederim! Uygulamamda UIButton'larım var ancak bunlardan hiçbir yerde kodda bahsetmedim. Hedef eylem mekanizmasını kaydetmek için arayüz oluşturucuyu kullandım (bu amaçla, düğme tıklamalarını işlemek için birkaç IBAction yöntemim var), bu nedenle düğmelere nasıl erişebilirim?
Namratha

1
@ Özelliğinin sizin için beyan edilmesini istiyorsanız, bunu da eklemek istiyorum. XCode 4'te, CTRL tuşunu basılı tutun, düğmeye tıklayın ve ardından farenizi görünümün ilgili .h dosyasına sürükleyin. Özellik adını sormak için bir diyalog açılır. O halde, kodunuzda kullanmanız için özelliğe sahip olacaksınız!
milesmeow

21
[myButton setTitle: @"myTitle" forState: UIControlStateNormal];

UIControlStateNormalBaşlığınızı ayarlamak için kullanın .

UI butonlarının sağladığı birkaç durum vardır, bir göz atabilirsiniz:

[myButton setTitle: @"myTitle" forState: UIControlStateApplication];
[myButton setTitle: @"myTitle" forState: UIControlStateHighlighted];
[myButton setTitle: @"myTitle" forState: UIControlStateReserved];
[myButton setTitle: @"myTitle" forState: UIControlStateSelected];
[myButton setTitle: @"myTitle" forState: UIControlStateDisabled];

Bu gönderiyi + 1'leyecektim ama yapmamaya karar verdim. [self.eraseButton setTitle: @ "Erase" forState: UIControlStateDisabled]; Bu, düğmeyi karartmaz. Zaten ayarlamışsanız, hiçbir şey yapmaz: hayır olarak.
coolcool1994

18

Swift'de çözüm arayan biri buraya inmiş olsaydı:

myButton.isEnabled = false // disables
myButton.setTitle("myTitle", for: .normal) // sets text

Dokümantasyon: isEnabled , setTitle .

Eski kod:

myButton.enabled = false // disables
myButton.setTitle("myTitle", forState: UIControlState.Normal) // sets text

'setTitle ( : forState :)', 'setTitle ( : for :)' olarak yeniden adlandırıldı
Lavi Avigdor

10

Düğmenin bir olduğunu varsayarsak UIButton:

UIButton *button = …;
[button setEnabled:NO]; // disables
[button setTitle:@"Foo" forState:UIControlStateNormal]; // sets text

İçin belgelere bakın UIButton.


3

Düğme başlığını değiştirmek için:

[mybtn setTitle:@"My Button" forState:UIControlStateNormal];
[mybtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];

Devre Dışı Bırakmak için:

[mybtn setEnabled:NO];

3

Swift 3'te, bir düğmenin başlığını şu şekilde değiştirebilirsiniz:

button.setTitle("Title", for: .normal)

ve düğmeyi şu şekilde devre dışı bırakırsınız:

button.isEnabled = false

.normalUIControlState.normaltür çıkarıldığı için aynıdır .


Bu bir işlem düğmesi ise ne kullanmalıyız?
Karthikeyan Sk

1

Uzantılı SWIFT 4

Ayarlamak:

// set button label for all states
extension UIButton {
    public func setAllStatesTitle(_ newTitle: String){
        self.setTitle(newTitle, for: .normal)
        self.setTitle(newTitle, for: .selected)
        self.setTitle(newTitle, for: .disabled)
    }
}

ve kullan:

yourBtn.setAllStatesTitle("btn title")

0

Başlığı dokunulmaya bir yanıt olarak değiştirmek istiyorsanız, bunu görünüm denetleyicisi temsilcinizdeki düğmenin IBAction yöntemi içinde deneyebilirsiniz. Bu, sesli sohbeti açar ve kapatır. Sesli sohbeti kurma burada ele alınmamaktadır!

- (IBAction)startChat:(id)sender {
UIButton *chatButton = (UIButton*)sender;
if (!voiceChat.active) {
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Voice Chat"
                                                                   message:@"Voice Chat will become live. Please be careful with feedback if your friend is nearby."
                                                            preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                          handler:^(UIAlertAction * action) {}];
    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
    [voiceChat start];
    voiceChat.active = YES;
    [chatButton setTitle:@"Stop Chat" forState:UIControlStateNormal];
}
else {
    [voiceChat stop];
    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Voice Chat"
                                                                   message:@"Voice Chat is closed"
                                                            preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
                                                          handler:^(UIAlertAction * action) {}];

    [alert addAction:defaultAction];
    [self presentViewController:alert animated:YES completion:nil];
    voiceChat.active = NO;
    [chatButton setTitle:@"Chat" forState:UIControlStateNormal];
}

}

voiceChat elbette sesli sohbete özeldir, ancak anahtarı kontrol etmek için ow yerel boole özelliğinizi kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.