2013-02-24 107 views
7

我想創建一個按鈕,一旦點擊將顯示另一個UIView的彈窗。爲了驗證這一點,我有下面的代碼在我viewDidLoad中節:以編程方式編碼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]; 
} 

進一步回落:

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

然而,控制檯不記錄「點擊」當我按下按鈕。有任何想法嗎?

回答

12

關注這些三行代碼:

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

你缺少自我。在所有三個。他們應該是:

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

另外,如果你是編程創建它,它不應該是一個IBAction爲(IB代表Interface Builder中,這是不是在Interface Builder創建)。

+0

啊我很傻。非常感謝你! – 2013-02-24 17:35:32

+1

現在,我在上面。當你創建一個屬性時,在綜合中做這個:@synthesize hard1 = _hard1;這種方式指的只是「hard1」屬性不會工作。它是self.hard1或_hard1(後者僅用於setter方法) – Odrakir 2013-02-24 17:38:10

+0

非常感謝您的幫助 – 2013-02-24 17:44:13

0

您已將事件響應者設置爲buttonClicked,但您已將IBAction定義爲buttonTap。這顯然是不行的......

應該

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

我做了一個錯字。我的實際代碼是上面編輯的,仍然不起作用。 – 2013-02-24 17:32:23

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


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

更換hard1到self.hard1