ปิดการใช้งานปุ่ม


99

ฉันต้องการปิดการใช้งานปุ่ม ( UIButton) บน iOS หลังจากที่คลิกแล้ว ฉันยังใหม่กับการพัฒนาสำหรับ iOS แต่ฉันคิดว่ารหัสที่เทียบเท่าตามวัตถุประสงค์ - C คือสิ่งนี้:

button.enabled = NO;

แต่ฉันไม่สามารถทำได้อย่างรวดเร็ว

คำตอบ:


209

ค่าบูลีนสำหรับในสวิฟท์NOfalse

button.isEnabled = false

ควรทำ

นี่เป็นเอกสารสวิฟท์สำหรับUIControlของisEnabledสถานที่ให้บริการ


ไม่ว่าคุณจะสร้างปุ่มผ่านทาง initializer หรือผ่านสตอรี่บอร์ด
KerrM

ฉันหมายถึงเมื่อฉันไม่มีทางออก วิธีแก้ปัญหาคือกำหนดปุ่มทั่วโลก
Daniel Springer

44

หากคุณต้องการให้ปุ่มอยู่นิ่งโดยไม่มีลักษณะ "กด":

// Swift 2
editButton.userInteractionEnabled = false 

// Swift 3
editButton.isUserInteractionEnabled = false 

จำไว้ว่า:

1) ของคุณIBOutletคือ ->@IBOutlet weak var editButton: UIButton!

2) รหัสด้านบนเข้าไป viewWillAppear


1
ฉันคิดว่านี่คือสิ่งที่ฉันกำลังมองหา แต่ดูเหมือนว่าจะเป็น UIKit เท่านั้นไม่ใช่ AppKit
drootang

13

วิธีที่ฉันทำมีดังนี้:

@IBAction func pressButton(sender: AnyObject) {
    var disableMyButton = sender as? UIButton
    disableMyButton.enabled = false
}

IBAction เชื่อมต่อกับปุ่มของคุณในกระดานเรื่องราว

หากคุณตั้งค่าปุ่มเป็น Outlet:

    @IBOutlet weak var myButton: UIButton!

จากนั้นคุณสามารถเข้าถึงคุณสมบัติที่เปิดใช้งานโดยใช้ไฟล์. สัญกรณ์บนชื่อปุ่ม:

    myButton.enabled = false

ใช้งานได้ดีสำหรับฉันใน Swift 4 ฉันสังเกตเห็นโดยค่าเริ่มต้นมันตั้งค่าผู้ส่งเป็น Any แทนที่จะเป็น AnyObject แต่ทั้งคู่ยังใช้งานได้ .... คุณได้รับข้อผิดพลาดอะไร
Krivvenz

เพื่อความชัดเจนบางทีคุณควรระบุในคำตอบของคุณด้านบนว่า IBOutlet จำเป็นสำหรับรหัสของคุณในการทำงาน ไม่ว่า IBOutlet จำเป็นหรือไม่คือสิ่งที่ทำให้ฉันสับสน เห็นได้ชัดว่าจำเป็น

ไม่จำเป็นต้องใช้เพื่อให้ทำงานได้ คุณสามารถพิมพ์ cast ปุ่มใน IBAction และเปลี่ยนสถานะเปิดใช้งานหรือหากคุณตั้งค่าเป็น IBOutlet คุณสามารถทำได้โดยใช้. หมายเหตุบนเต้าเสียบ ทั้งสองวิธีได้ผล
Krivvenz

ฉันเชื่อว่า IBOutlet เป็นสิ่งจำเป็นหากคุณต้องการปิดการใช้งานปุ่มจากภายในฟังก์ชันอื่น


6

สำหรับผู้ที่ Googled "ปิดการใช้งานปุ่ม" แต่อาจมีกรณีการใช้งานที่เหมาะสมกว่า:

ปิดการใช้งานด้วยเอฟเฟกต์ภาพ:ตามที่คนอื่น ๆ กล่าวไว้วิธีนี้จะป้องกันไม่ให้กดปุ่มและระบบจะปิดใช้งานโดยอัตโนมัติ:

yourButton.isEnabled = false 

ปิดใช้งานโดยไม่มีเอฟเฟกต์ภาพ:คุณใช้ปุ่มในกรณีที่ควรดูปกติ แต่ไม่ทำงานปุ่มไลค์โดยตอบสนองต่อการสัมผัส ลองดูสิ!

yourButton.userInteractionEnabled = false

ซ่อนโดยไม่ปิดใช้งาน:วิธีนี้จะซ่อนปุ่มโดยไม่ปิดใช้งาน (มองไม่เห็น แต่ยังสามารถแตะได้):

 yourButton.alpha = 0.0

ลบ:สิ่งนี้จะลบมุมมองทั้งหมด:

 yourButton.removeFromSuperView()

แตะบางสิ่งที่อยู่ด้านหลังปุ่ม:มีปุ่มสองปุ่มซ้อนกันและคุณต้องการให้ปุ่มบนสุดทำหน้าที่ชั่วคราวเหมือนไม่มีอยู่ หากคุณไม่ต้องการปุ่มบนสุดอีกให้นำออก หากคุณต้องการอีกครั้งให้ลองย่อความสูงหรือความกว้างเป็น 0!


1

คุณสามารถเปิด / ปิดการใช้งานปุ่มโดยใช้isEnabledหรือisUserInteractionEnabledคุณสมบัติ

ความแตกต่างระหว่างสองคือ:

  • isEnabledเป็นคุณสมบัติของ UIControl (ซุปเปอร์คลาสของ UIButton) และมีเอฟเฟกต์ภาพ (เช่นเป็นสีเทา)ของการเปิด / ปิด

  • isUserInteractionEnabled เป็นสมบัติของ UIView (ซูเปอร์คลาสของ UIControl) และไม่มีเอฟเฟกต์ภาพแม้ว่าจะบรรลุวัตถุประสงค์

การใช้งาน:

myButton.isEnabled = false // Recommended approach

myButton.isUserInteractionEnabled = false // Alternative approach

คุณรู้หรือไม่ว่าเหตุใดฉันจึงได้รับข้อผิดพลาดนี้ Value of type '(AnyObject) -> ()' has no member 'isEnabled'

ฉันยังได้รับข้อผิดพลาดถ้าฉันจะเปลี่ยนไป(_ sender: ) UIButtonข้อผิดพลาดอ่าน:Value of type '(UIButton) -> ()' has no member 'isEnabled'

0

สมมติว่าในสวิฟท์ 4 คุณมีปุ่มตั้งค่าสำหรับการทำต่อเป็นIBActionเช่นนี้@IBAction func nextLevel(_ sender: UIButton) {} และคุณมีการกระทำอื่น ๆ ที่เกิดขึ้นภายในแอปของคุณ (เช่นการจับเวลา, เล่นเกม, ฯลฯ ) แทนที่จะปิดการใช้งานปุ่มทำต่อคุณอาจต้องการที่จะให้ผู้ใช้ของคุณเลือกที่จะใช้ทำต่อว่าในขณะที่การดำเนินการอื่น ๆ ยังคงเกิดขึ้นและไม่ crashing APP ที่ วิธีการมีดังนี้

var appMode = 0

@IBAction func mySegue(_ sender: UIButton) {

    if appMode == 1 {  // avoid crash if button pressed during other app actions and/or conditions
        let conflictingAction = sender as UIButton
        conflictingAction.isEnabled = false
    }
}

โปรดทราบว่าคุณอาจมีเงื่อนไขอื่น ๆ ภายในif appMode == 0และ / หรือif appMode == 1ที่จะยังคงเกิดขึ้นและไม่ขัดแย้งกับmySegueปุ่ม ดังนั้นหลีกเลี่ยงความผิดพลาด


0

ปุ่มนี้สามารถปิดการใช้งานใน Swift 4 ได้ด้วยรหัส

@IBAction func yourButtonMethodname(sender: UIButon) {
 yourButton.isEnabled = false 
}

หากคุณลองใช้รหัสข้อผิดพลาดนี้ควรเกิดขึ้น:Value of type '(AnyObject) -> ()' has no member 'isEnabled'

yourButton(sender: UIButton)ฉันคิดว่าคุณหมายถึง รหัสที่อัปเดตของคุณอาจทำให้เกิดข้อผิดพลาดต่อไปนี้:Value of type '(UIButton) -> ()' has no member 'isEnabled'

0

เพื่อให้สิ่งนี้ใช้งานได้:

yourButton.isEnabled = false

คุณต้องสร้างร้านนอกเหนือจากปุ่ม UI ของคุณ


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