เหตุการณ์คลิกปุ่มโดยใช้โปรแกรมหรือไม่


126

มีวิธีในการเริ่มการทำงานของเหตุการณ์คลิกปุ่มโดยทางโปรแกรมหรือไม่? ฉันมีปุ่มวางไว้ที่นั่นใน UIView และในบางสถานการณ์ฉันต้องการคลิกปุ่มผ่านรหัสไม่ใช่ด้วยตนเองในฐานะผู้ใช้ เป็นไปได้ไหมในการพัฒนา iOS โปรดให้คำแนะนำของคุณและแนะนำวิธีการทำเช่นนั้น

ขอบคุณ

คำตอบ:


314

เรียงลำดับเหมือนคำตอบของ Ken แต่มีความยืดหยุ่นมากกว่าเนื่องจากจะติดตามการทำงานจริงของปุ่มหากคุณเปลี่ยนหรือเพิ่มมากกว่าหนึ่ง

[button sendActionsForControlEvents:UIControlEventTouchUpInside];

8
ปุ่มนี้เน้นปุ่มถ้าbutton.showsTouchWhenHighlighted = YESต้องการด้วยการสัมผัสจริงหรือไม่?
chown

2
คำตอบนี้เป็น b / c ที่ยอดเยี่ยมซึ่งสามารถแปลเป็นตัวควบคุมอื่น ๆ ได้อย่างง่ายดายเช่น UISwitch (UIControlEventValueChanged) และในกรณีของฉันดีกว่าการเรียกรหัสเป้าหมาย / การกระทำโดยตรง b / c ฉันต้องการให้สวิตช์เปลี่ยน! ขอบคุณ.
John Erck

ไม่มันไม่ได้เน้นปุ่ม if button.showsTouchWhenHighlighted = YES ; (
Richie Hyatt

7
หากคุณต้องการจุดเด่นคุณสามารถทำได้ [ปุ่ม setHighlighted: ใช่]; [ปุ่ม sendActionsForControlEvents: UIControlEventTouchUpInside]; [ปุ่ม setHighlighted: NO]; และใช้งานได้ดี -rrh
Richie Hyatt

สวัสดี @zaky ถ้าฉันต้องการเฉพาะแอนิเมชั่นโดยไม่ต้องส่งแอคชั่นฉันจะทำได้อย่างไร?
benhi

13

ฉันมีปัญหาเดียวกันกับด้านบน ฉันจะโพสต์ความคิดเห็น แต่ชื่อเสียงของฉันยังไม่สูงพอ ดังนั้นฉันจะโพสต์คำตอบแบบเต็มแทน:

[btn setHighlighted:YES];
[btn sendActionsForControlEvents:UIControlEventTouchUpInside];
[btn performSelector:@selector(setHighlighted:) withObject:NO afterDelay:0.25];

การดำเนินการนี้จะกดปุ่มโดยใช้โปรแกรมและไฮไลต์เป็นระยะเวลาที่ดูเหมือนปกติ คำแนะนำของ Richie ไม่ได้ผลเนื่องจากปุ่มถูกไฮไลต์เท่านั้น (ถ้าเป็นเช่นนั้น) ในช่วงเวลาที่มองไม่เห็น


มันไม่ได้ถูกไฮไลต์การวาดจะเกิดขึ้นหลังจากที่โค้ดปัจจุบันเสร็จสิ้นแล้วเท่านั้น นี่เป็นการแก้ไขที่ดี
mattsven

6

ทำไมไม่เพียงรันโค้ดที่รันเมื่อผู้ใช้กดปุ่ม?

-(void)myMethod
{
   // do stuff
}

-(IBAction)myButtonClick:(id)sender
{
    [self myMethod];
}

-(void)clickMyButton
{
    [self myMethod];
    // OR
    [self myButtonClick:nil];
}

ไม่ข้อกำหนดของฉันไม่ได้เรียกใช้เมธอดวิธีการเริ่มการทำงานของปุ่มคลิกเหตุการณ์โดยทางโปรแกรมไม่ใช่เมื่อผู้ใช้คลิกด้วยตนเอง ฉันสร้าง UIButton โดยใช้โปรแกรมใน UIView ฉันต้องการเริ่มเหตุการณ์การคลิกปุ่มโดยอัตโนมัติหลังจากช่วงเวลาหนึ่งผ่านโปรแกรมเองไม่ใช่โดยผู้ใช้
Getsy

จากนั้นจะเป็นไปไม่ได้หากไม่มีการสังเคราะห์สัมผัส ดูcocoawithlove.com/2008/10/… . อย่างไรก็ตามคุณไม่สามารถส่งแอปของคุณไปยัง App Store โดยใช้วิธีนี้ได้เนื่องจากใช้ API ส่วนตัว โดยปกติจะใช้เพื่อวัตถุประสงค์ในการดีบัก
Evan Mulawski

คุณไม่ได้อธิบายว่าทำไมคุณต้องจำลองการสัมผัสเทียบกับการเรียกใช้เมธอด แต่นั่นเป็นวิธีที่ง่ายที่สุด การดำเนินการจับเวลาของคุณสามารถเรียกใช้วิธีใดก็ได้ที่คุณต้องการและวิธีการเรียกใช้สามารถให้ข้อเสนอแนะใน UI ว่าปุ่มกำลังกดโดยเปลี่ยนสถานะปุ่ม (เลือกไฮไลต์ ฯลฯ ) ถ้าไม่ได้ผลก็ช่างมันเถอะ
XJones

1

หากคุณกำลังพูดถึง UIButton คุณสามารถเรียกใช้วิธีเดียวกับที่ UIButton เรียกเมื่อมีการแตะ ตัวอย่างเช่น:

[self myButtonsTargetMethod];

ไม่ข้อกำหนดของฉันไม่ได้เรียกใช้เมธอดวิธีการเริ่มการทำงานของปุ่มคลิกเหตุการณ์โดยทางโปรแกรมไม่ใช่เมื่อผู้ใช้คลิกด้วยตนเอง ฉันสร้าง UIButton โดยใช้โปรแกรมใน UIView ฉันต้องการเริ่มเหตุการณ์การคลิกปุ่มโดยอัตโนมัติหลังจากช่วงเวลาหนึ่งผ่านโปรแกรมเองไม่ใช่โดยผู้ใช้
Getsy

1

ใช่,

[_button setHighlighted:YES];
[_button sendActionsForControlEvents:UIControlEventTouchUpInside];
[_button setHighlighted:NO];

แต่ปัญหาคือคุณจะไม่สามารถเห็นเหตุการณ์เหล่านั้นได้เนื่องจากเร็วเกินไป ดังนั้นสิ่งที่คุณสามารถทำได้คือลองใช้รหัสด้านบนกับ NSTimer

NSTimer *quick = [NSTimer scheduledTimerWithTimeInterval:2.5 target:self selector:@selector(MeFirst:) userInfo:nil repeats:NO];

MeFirst เป็นวิธีที่ฉันสร้างขึ้น

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