2013-02-24 18 views
7

Próbuję utworzyć przycisk, który po stuknięciu wyświetli popover innego UIView. Aby to przetestować, Mam następujący kod w mojej sekcji viewDidLoad:Kod programowy akcja UIButton

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.hard1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [self.hard1 setFrame:CGRectMake(884, 524, 105, 60)]; // set the x,y,width and height based on your specs 
    UIImage *buttonImage = [UIImage imageNamed:@"green.jpg"]; 
    hard1.layer.cornerRadius = 10; 
    hard1.clipsToBounds = YES; 
    [hard1 addTarget: self 
       action: @selector(buttonClicked:) 
    forControlEvents: UIControlEventTouchUpInside]; 
    [self.hard1 setImage:buttonImage forState:UIControlStateNormal]; 
    [self.view addSubview:self.hard1]; 
} 

i dalej w dół:

- (IBAction) buttonClicked: (id)sender 
{ 
    NSLog(@"Tap"); 
} 

jednak konsola nie log 'Tap', kiedy nacisnąć przycisk. Jakieś pomysły?

Odpowiedz

12

Oglądać te trzy wiersze kodu:

hard1.layer.cornerRadius = 10; 
hard1.clipsToBounds = YES; 
[hard1 addTarget: self 
      action: @selector(buttonClicked:) 
forControlEvents: UIControlEventTouchUpInside]; 

Brakuje siebie. we wszystkich trzech. Powinny one być:

self.hard1.layer.cornerRadius = 10; 
self.hard1.clipsToBounds = YES; 
[self.hard1 addTarget: self 
      action: @selector(buttonClicked:) 
forControlEvents: UIControlEventTouchUpInside]; 

Ponadto, jeśli tworzysz go programowo, to nie powinno być IBAction (IB oznacza interfejsu konstruktora, a to nie jest tworzony w konstruktorze Interface).

+0

Ah głupi mnie. Dziękuję Ci bardzo! –

+1

Teraz, kiedy jestem na tym. Kiedy tworzysz właściwość, zrób to w syntezie: @synthesize hard1 = _hard1; W ten sposób odwołanie się do własności jako "hard1" nie zadziała. To albo self.hard1 albo _hard1 (ten ostatni używany tylko w metodzie setera) – Odrakir

+0

bardzo dziękuję za pomoc –

0

Umieszczono komunikat o zdarzeniu jako buttonClicked, ale w IBAction zdefiniowałeś buttonTap. To oczywiście nie będzie działać ...

Powinno być

[hard1 addTarget: self 
       action: @selector(buttonTap:) 
    forControlEvents: UIControlEventTouchUpInside]; 
+0

zrobiłem literówkę. Mój aktualny kod jest edytowany powyżej, nadal nie działa. –

3
self.hard1 = [UIButton buttonWithType:UIButtonTypeCustom]; 


[hard1 addTarget: self 
       action: @selector(buttonClicked:) forControlEvents: UIControlEventTouchUpInside]; 

Wymień hard1 do self.hard1