Xcode'da programlı olarak bir düğmeye nasıl eylem eklersiniz?


105

Arayüz oluşturucudan sürükleyerek bir düğmeye nasıl IBAction ekleyeceğimi biliyorum, ancak zamandan kazanmak ve sürekli ileri geri geçiş yapmaktan kaçınmak için eylemi programlı olarak eklemek istiyorum. Çözüm muhtemelen gerçekten çok basit, ancak aradığımda herhangi bir cevap bulamıyorum. Teşekkür ederim!

Yanıtlar:


222

Bunu dene:

Swift 4

myButton.addTarget(self,
                   action: #selector(myAction),
                   for: .touchUpInside)

Amaç-C

[myButton addTarget:self 
             action:@selector(myAction) 
   forControlEvents:UIControlEventTouchUpInside];

Apple'ın Belgelerinde zengin bir bilgi kaynağı bulabilirsiniz. UIButton'un belgelerine bir göz atın, UIButton'un hedef ekleme yöntemini uygulayan UIControl'ün soyundan geldiğini ortaya çıkaracaktır .

-

Sonra iki nokta üst üste ekleyip eklememeye dikkat etmeniz gerekir myAction. action:@selector(myAction)

İşte referans .


Düğmeme basıldığında seçiciye bir parametre iletmek istersem (örn. UITableViewCell içinde bir düğmem var ve hücrenin düğmesine basıldığında o hücredeki nesneyi iletmek istiyorum)?
acecapades

1
@acecapades Sanırım iki şeyi karıştırıyorsunuz. PerformSelector ile yapabileceğiniz gibi bir parametre ekleyemezsiniz. UIControl kökenli UIButton tarafından kullanılan eylem modeli, controlEvent tetiklendiğinde belirli bir selektörle bazı hedefleri bildirmektir. Sizin durumunuzda bu olduğunda, düğmenizi kimin kapsüllediğini görmek için denetimler arasında yukarı çıkabilir ve masa hücresini model ilişkisine çözümlemek için bir yöntem isteyebilir ve ardından bununla istediğinizi yapabilirsiniz.
Nick Weaver

1
Anlıyorum. Mantıklı. Sanırım ne dediğini anlıyorum. İpucu için teşekkürler Nick!
acecapades

birisi bunu hızlıca tercüme edebilir mi?

23

Hızlı cevap:

myButton.addTarget(self, action: "click:", for: .touchUpInside)

func click(sender: UIButton) {
    print("click")
}

Belgeler: https://developer.apple.com/documentation/uikit/uicontrol/1618259-addtarget


UIControl.addTarget çağrısında "tıklama" sonrasındaki ":" nedir?
dumbledad

1
Seçiciler, :işlev bağımsız değişkenleri için yer tutuculara sahiptir. Yana clicksürer senderbir değiştirilir argüman, :seçici dizede.
Etan

Bu kısa süre önce benim için Swift 3. button.addTarget için çalıştı (self, action: #selector (ViewController.click), for: UIControlEvents.touchUpInside) func click () {print ("click")} @Glauco Neves bizi işaret ettiği için teşekkürler doğru yolda
uplearnedu.com

14
CGRect buttonFrame = CGRectMake( 10, 80, 100, 30 );
        UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];
        [button setTitle: @"My Button" forState: UIControlStateNormal];
        [button addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside];
        [button setTitleColor: [UIColor redColor] forState: UIControlStateNormal];
[view addSubview:button];

2 veya daha fazla eylem eklemek mümkün mü?
ErasmoOliveira 02

9

bunu dene:

önce bunu viewcontroller'ın .h dosyanıza yazın

UIButton *btn;

Şimdi bunu viewcontrollers viewDidLoad'un .m dosyasına yazın.

btn=[[UIButton alloc]initWithFrame:CGRectMake(50, 20, 30, 30)];
[btn setBackgroundColor:[UIColor orangeColor]];
//adding action programatically
[btn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];

Bu dış viewDidLoad yöntemini görünüm denetleyicinizin .m dosyasına yazın

- (IBAction)btnClicked:(id)sender
{
   //Write a code you want to execute on buttons click event
}

8
 CGRect buttonFrame = CGRectMake( x-pos, y-pos, width, height );   //
 CGRectMake(10,5,10,10) 

 UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];

 button setTitle: @"My Button" forState: UIControlStateNormal];

 [button addTarget:self action:@selector(btnClicked:) 
 forControlEvents:UIControlEventTouchUpInside];

 [button setTitleColor: [UIColor BlueVolor] forState:
 UIControlStateNormal];

 [view addSubview:button];




 -(void)btnClicked {
    // your code }

6

Swift 3 için

Önce düğme eylemi için bir işlev oluşturun ve ardından işlevi düğme hedefinize ekleyin

func buttonAction(sender: UIButton!) {
    print("Button tapped")
}

button.addTarget(self, action: #selector(buttonAction),for: .touchUpInside)

3
UIButton *btnNotification=[UIButton buttonWithType:UIButtonTypeCustom];
btnNotification.frame=CGRectMake(130,80,120,40);
btnNotification.backgroundColor=[UIColor greenColor];
[btnNotification setTitle:@"create Notification" forState:UIControlStateNormal];
[btnNotification addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnNotification];


}

-(void)btnClicked
{
    // Here You can write functionality 

}

lütfen örneğinizin nasıl yardımcı olabileceğini açıklayan bazı yorumlar sağlayın.
Nogard

UIButton * btnNotification = [UIButton buttonWithType: UIButtonTypeCustom]; btnNotification.frame = CGRectMake (130,80,120,40); // Düğme Çerçevesi Ayarı btnNotification.backgroundColor = [UIColor greenColor]; [btnNotification setTitle: @ "create Notification" forState: UIControlStateNormal]; // Düğmenin başlığını ayarlayın [btnNotification addTarget: self action: @selector (btnClicked) forControlEvents: UIControlEventTouchUpInside]; // Target For düğmesini ekleyin [self.view addSubview: btnNotification];} - (void) btnClicked {// Burada işlevsellik yazabilirsiniz}
user2677311

- (void) btnClicked {// burada ne istersen onu buton için eylemi ayarlayabilirsin // Örnek: sonraki görünüm denetleyicisine git nextviewController * nextPage = [nextviewController ayırma] init]; [self.navigationController pushviewcontroller: nextPage animasyonlu: YES]; }
user2677311

2

UIButtonmiras alır UIControl. Bu, eylemleri eklemek / kaldırmak için tüm yöntemleri içerir: UIControl Sınıf Başvurusu . , Kapakları "Eylem mesajlarının hazırlanması ve Gönderme" bölümüne bakın – sendAction:to:forEvent:ve – addTarget:action:forControlEvents:.


1
 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self 
       action:@selector(aMethod1:)
forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"Show View" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[view addSubview:button];   
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.