버튼의 텍스트 변경 및 iOS에서 버튼 비활성화


106

iOS에서 버튼의 텍스트를 어떻게 변경하고 버튼을 비활성화합니까?

답변:


208

Hey Namratha, UIButton의 텍스트 및 활성화 / 비활성화 상태 변경에 대해 묻는 경우 다음과 같이 매우 쉽게 수행 할 수 있습니다.

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

Interface Builder에서 버튼을 생성하고 코드에서 버튼에 액세스하려는 경우 해당 버튼이 IBAction호출에 대한 인수로 전달된다는 사실을 활용할 수 있습니다 .

- (IBAction) triggerActionWithSender: (id) sender;

이것은 버튼에 바인딩 될 수 있으며 sender액션이 트리거 될 때 인수에 버튼을 가져옵니다 . 이것이 충분하지 않다면 (액션이 아닌 다른 곳에서 버튼에 액세스해야하기 때문에) 버튼에 대한 콘센트를 선언하십시오.

@property(retain) IBOutlet UIButton *someButton;

그런 다음 IB의 버튼을 컨트롤러에 바인딩 할 수 있습니다. NIB로드 코드는 인터페이스를로드 할 때 속성 값을 설정합니다.


감사합니다! 내 앱에 UIButton이 있지만 코드에서 언급하지 않았습니다. 인터페이스 빌더를 사용하여 타겟 액션 메커니즘을 등록했습니다 (이를 위해 버튼 클릭을 처리하는 몇 가지 IBAction 메소드가 있습니다). 버튼에 액세스하려면 어떻게해야합니까 ??
Namratha

1
@ 속성을 선언하려는 경우에도 추가하고 싶습니다. XCode 4에서 CTRL 키를 누른 상태에서 버튼을 클릭 한 다음 마우스를 뷰의 해당 .h 파일로 드래그합니다. 속성 이름을 묻는 대화 상자가 나타납니다. 그러면 코드에서 사용할 수있는 속성이 생깁니다!
milesmeow

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

UIControlStateNormal제목을 설정하는 데 사용 합니다.

UI 버튼이 제공하는 몇 가지 상태가 있습니다.

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

이 게시물에 +1하려고했지만하지 않기로 결정했습니다. [self.eraseButton setTitle : @ "Erase"forState : UIControlStateDisabled]; 이것은 버튼을 어둡게하지 않습니다. 이미 setEnable :을 no로 설정 한 경우 아무 작업도 수행하지 않습니다.
coolcool1994

18

Swift에서 솔루션을 찾고있는 누군가가 여기에 도착하면 다음과 같습니다.

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

문서 : isEnabled , setTitle .

이전 코드 :

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

'setTitle ( : forState :)'의 이름이 'setTitle ( : for :)' 로 변경되었습니다 .
Lavi Avigdor

10

버튼이 다음 UIButton과 같다고 가정합니다 .

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

에 대한 설명서를 참조하십시오 UIButton.


3

버튼 제목을 변경하려면 :

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

비활성화의 경우 :

[mybtn setEnabled:NO];

3

Swift 3에서는 다음과 같이 간단히 버튼의 제목을 변경할 수 있습니다.

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

다음과 같이 버튼을 비활성화합니다.

button.isEnabled = false

.normalUIControlState.normal유형이 유추되기 때문에 동일 합니다.


액션 버튼이라면 무엇을 사용해야합니까?
Karthikeyan Sk

0

탭에 대한 응답으로 제목을 변경하려면 뷰 컨트롤러 델리게이트에있는 버튼의 IBAction 메서드 내에서이를 시도 할 수 있습니다. 음성 채팅을 켜고 끕니다. 음성 채팅 설정은 여기서 다루지 않습니다!

- (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은 물론 음성 채팅에만 해당되지만 ow 로컬 부울 속성을 사용하여 스위치를 제어 할 수 있습니다.


0

확장 기능이있는 SWIFT 4

세트:

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

그리고 사용 :

yourBtn.setAllStatesTitle("btn title")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.