เปลี่ยนข้อความของปุ่มและปุ่มปิดใช้งานใน iOS


คำตอบ:


208

สวัสดีนามรัฐหากคุณกำลังถามเกี่ยวกับการเปลี่ยนข้อความและสถานะเปิด / ปิดการใช้งานของ UIButton สามารถทำได้อย่างง่ายดายดังนี้

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

หากคุณได้สร้างปุ่มในตัวสร้างส่วนต่อประสานและต้องการเข้าถึงด้วยรหัสคุณสามารถใช้ประโยชน์จากข้อเท็จจริงที่ว่าปุ่มเหล่านี้ถูกส่งผ่านเป็นอาร์กิวเมนต์ในการIBActionเรียก:

- (IBAction) triggerActionWithSender: (id) sender;

สิ่งนี้สามารถผูกไว้กับปุ่มและคุณจะได้รับปุ่มในsenderอาร์กิวเมนต์เมื่อการกระทำถูกทริกเกอร์ หากยังไม่เพียงพอ (เนื่องจากคุณต้องการเข้าถึงปุ่มอื่นที่ไม่ใช่ในการดำเนินการ) ให้ประกาศเต้าเสียบสำหรับปุ่ม:

@property(retain) IBOutlet UIButton *someButton;

จากนั้นเป็นไปได้ที่จะผูกปุ่มใน IB เข้ากับคอนโทรลเลอร์โค้ดการโหลด NIB จะตั้งค่าคุณสมบัติเมื่อโหลดอินเทอร์เฟซ


ขอบคุณ! ฉันมี UIButtons ในแอพของฉัน แต่ฉันไม่ได้พูดถึงมันในโค้ดเลย ฉันใช้ตัวสร้างอินเทอร์เฟซเพื่อลงทะเบียนกลไกการดำเนินการเป้าหมาย (ด้วยเหตุนี้ฉันมีวิธี IBAction สองสามวิธีในการจัดการการคลิกปุ่ม) แล้วฉันจะเข้าถึงปุ่มได้อย่างไร?
น้ำรฐา

1
นอกจากนี้ยังต้องการเพิ่มว่าหากคุณต้องการให้คุณสมบัติ @ ประกาศให้คุณ ใน XCode 4 กดปุ่ม CTRL ค้างไว้คลิกที่ปุ่มจากนั้นลากเมาส์ไปที่ไฟล์. h ที่เกี่ยวข้องของมุมมอง ป๊อปอัปบทสนทนาเพื่อแจ้งให้คุณป้อนชื่อคุณสมบัติ จากนั้นคุณจะมีทรัพย์สินให้คุณใช้ในรหัสของคุณ!
milesmeow

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

ใช้UIControlStateNormalเพื่อตั้งชื่อเรื่องของคุณ

มีสองสถานะที่ UIbuttons มีให้คุณสามารถดูได้:

[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: @ "ลบ" forState: UIControlStateDisabled]; ปุ่มนี้ไม่ได้ทำให้ปุ่มหรี่ลง จะไม่ทำอะไรเลยถ้าคุณได้ setEnable: as no
coolcool1994

19

หากใครที่กำลังมองหาวิธีแก้ปัญหาใน 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

.normalเหมือนกับUIControlState.normalเนื่องจากประเภทถูกอนุมาน


เราควรใช้อะไรถ้าเป็นปุ่มดำเนินการ?
Karthikeyan Sk

1

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")

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 นั้นเฉพาะสำหรับการแชทด้วยเสียง แต่คุณสามารถใช้คุณสมบัติบูลีนในเครื่องของคุณเพื่อควบคุมสวิตช์ได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.