Düğme tıklama olayını programlı olarak ateşle?


126

Bir düğme tıklama olayını programlı olarak tetiklemenin bir yolu var mı? UIView'de oraya yerleştirilmiş bir düğmem var ve belirli bir senaryoda düğmeyi kullanıcı olarak manuel olarak değil, kod aracılığıyla tıklamak istiyorum. İOS geliştirmede mümkün mü? Lütfen önerilerinizi sağlayın ve bunu nasıl yapacağım konusunda bana yol gösterin.

Teşekkürler.

Yanıtlar:


314

Ken'in cevabı gibi, ancak daha esnektir, çünkü onları değiştirirseniz veya birden fazla eklerseniz düğmelerin gerçek eylemlerini takip eder.

[button sendActionsForControlEvents:UIControlEventTouchUpInside];

8
Bu, button.showsTouchWhenHighlighted = YESgerçek bir dokunuşla olmasını isterse düğmeyi vurgular mı ?
chown

2
Bu cevap harika b / c, UISwitch (UIControlEventValueChanged) gibi diğer kontrollere kolayca çevrilebilir ve benim durumumda hedef / eylem kodunu doğrudan çağırmaktan çok daha iyidir, b / c Anahtarın değiştirmesini istiyorum! Teşekkürler.
John Erck

Hayır, eğer button.showsTouchWhenHighlighted = YES ise düğmeyi vurgulamıyor. ; (
Richie Hyatt

7
vurguya ihtiyacınız varsa bunu yapabilirsiniz. [düğme seti Vurgulanmış: YES]; [düğme sendActionsForControlEvents: UIControlEventTouchUpInside]; [düğme seti Vurgulanmış: HAYIR]; ve harika çalışıyor. -rrh
Richie Hyatt

Merhaba @zaky, eylem göndermeden sadece animasyon istiyorsam bunu nasıl yapabilirim?
benhi

13

Yukarıdaki ile aynı sorunu yaşadım. Bir yorum yayınlardım ama itibarım yeterince yüksek değil. Öyleyse, bunun yerine tam cevabı göndereceğim:

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

Bu, programlı olarak düğmeye basar ve görünüşte normal bir süre boyunca onu vurgular. Richie'nin önerisi, düğme yalnızca (eğer varsa) algılanamayacak bir süre boyunca vurgulandığı için işe yaramadı.


Vurgulanmamış, çizim yalnızca geçerli kod parçasının yürütülmesi tamamlandıktan sonra gerçekleşir. Bu güzel bir düzeltme.
mattsven

6

Neden kullanıcı düğmeye bastığında çalıştırılan kodu çalıştırmıyorsunuz?

-(void)myMethod
{
   // do stuff
}

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

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

Hayır, benim ihtiyacım, kullanıcı manuel olarak tıkladığında değil, yöntemi çağırmak değil, düğme tıklama olayını programlı olarak nasıl tetiklerim. Bir UIView'de programlı olarak bir UIButton oluşturdum, düğme tıklama olayını kullanıcı tarafından değil, programın kendisi aracılığıyla belirli bir zaman aralığından sonra otomatik olarak ateşlemek istiyorum.
Getsy

O zaman dokunuşu sentezlemeden mümkün değil. Bkz cocoawithlove.com/2008/10/… . Ancak, özel bir API kullandığı için uygulamanızı bu yöntemi kullanarak App Store'a gönderemezsiniz. Normalde hata ayıklama amacıyla kullanılır.
Evan Mulawski

Neden bir dokunuşu simüle etmeniz gerektiğini veya sadece yöntemi çağırmanız gerektiğini açıklamıyorsunuz, ancak bu, gitmenin en kolay yolu. Zamanlayıcı eyleminiz, istediğiniz herhangi bir yöntemi çağırabilir ve çağırdığı yöntem, düğme durumunu (seçili, vurgulanmış vb.) Değiştirerek UI'de düğmeye basıldığına dair geri bildirim verebilir. Bu işe yaramazsa, öyle olsun.
XJones

1

Bir UIButton'dan bahsediyorsanız, dokunulduğunda UIButton'un çağırdığı yöntemi çağırabilirsiniz. Örneğin:

[self myButtonsTargetMethod];

Hayır, benim ihtiyacım, kullanıcı manuel olarak tıkladığında değil, yöntemi çağırmak değil, düğme tıklama olayını programlı olarak nasıl tetiklerim. Bir UIView'de programlı olarak bir UIButton oluşturdum, düğme tıklama olayını kullanıcı tarafından değil, programın kendisi aracılığıyla belirli bir zaman aralığından sonra otomatik olarak ateşlemek istiyorum.
Getsy

1

Evet,

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

Ancak buradaki sorun şu ki, bu olayı çok hızlı olduğu için göremeyeceksiniz. bu yüzden yapabileceğiniz şey yukarıdaki kodu NSTimer ile denemektir.

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

MeFirst benim oluşturduğum yöntemdir.

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.