UIButton的点击事件没有被解雇

时间:2013-03-21 12:02:17

标签: iphone ios ipad uibutton xib

我制作了一个简单的应用,我在每个方向上加载不同的.xib

我有两个xib的PortxibLandxib,在两个xib中,我拖了一个按钮并分配了一个

在两个xib中将值标记为1

我在viewDidLoad

中写了这段代码
UIButton *btn=(UIButton *)[self.view viewWithTag:1];
    [btn addTarget:self action:@selector(BtnClick:) forControlEvents:UIControlEventTouchUpInside];

这是选择器方法,

-(void)BtnClick:(id)sender
    {
        NSLog(@"BtnClick");
    }

UIButton的点击事件未被解雇......

OR

还有其他方法可以从方向调用相同的按钮方法吗?

编辑:

.h file

.m file

3 个答案:

答案 0 :(得分:6)

确保......

  1. 按钮位于xib的根视图中,因为您在self.view中找到它或确保将其置于正确的视图中,并将该视图与viewWithTag一起使用
  2. 您已指定标记 1 ,因此请确保其中没有其他控件 相同的视图有标签1其他明智的按钮将不被标签识别。如果这是你的情况,那么只需将按钮的标签更改为该视图的非常不寻常的数字,如999或其他任何东西并进行测试。
  3. 修改

    我觉得您在设置代码的viewDidLoad处无法识别您的视图。因此,只需在viewDidLoad中注释掉该代码,然后在加载nib后转换 changeOrientation 方法。

    -(void)changeOrientation
    {
        UIInterfaceOrientation orientation =  [[UIApplication sharedApplication] statusBarOrientation];
    
    
        if(orientation==UIInterfaceOrientationPortrait || orientation==UIInterfaceOrientationPortraitUpsideDown)
        {
            [[NSBundle mainBundle] loadNibNamed:@"PortraitXib" owner:self options:nil];
        }
        else 
        {
            [[NSBundle mainBundle] loadNibNamed:@"LandscapeXib" owner:self options:nil];
        }
    
        //Adding this code here makes sense that nib is loaded and after that we are recognizing button from loaded view of nib.
        UIButton *btn = (UIButton*)[self.view viewWithTag:1];
        [btn addTarget:self action:@selector(BtnClick:) forControlEvents:UIControlEventTouchUpInside];    
    }
    

    希望这有帮助。

答案 1 :(得分:5)

在头文件中添加

IBOutlet UIButton *btn;

从你的xib文件中引用这个btn。

在您的情况下,您使用的btn未从xib文件中引用,因此该方法未触发

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

将函数设为IBAction并从nib btn引用它。 在这种情况下,您无需显式添加目标。

如果你没有在笔尖中添加按钮,那么别忘了在视图中添加init和addsubview

您可以看到本教程http://www.idev101.com/learn/interface_builder_connections.html

编辑检查打印的内容?

     for (UIButton *but in [self.view subviews])
     {
            NSLog("but.tag %d",but.tag);
            if(but.tag==1)// compare for same row elements
            {
            NSLog("Button Added");

              [btn addTarget:self action:@selector(BtnClick:) forControlEvents:UIControlEventTouchUpInside];
            }
      }

答案 2 :(得分:0)

您可以添加这样的按钮。 将此添加到didLoad方法

 UIButton* aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  [aButton setTag:1];
  [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
  [aView addSubview:aButton];
}

// then ...

- (void)buttonClicked:(UIButton*)button
{
  NSLog(@"Button %d clicked.", [button tag]);
}