【问题标题】:Click event of UIButton is not getting firedUIButton 的点击事件没有被触发
【发布时间】:2013-03-10 22:20:06
【问题描述】:

我做了一个简单的应用程序,我在每个方向上加载不同的.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 的点击事件没有被触发...

有没有其他方法可以从两个方向调用相同的按钮方法??

编辑:

.h file

.m file

【问题讨论】:

  • 您可以尝试在 willAnimateRotationToInterfaceOrientation 中添加代码以在两个方向上触发
  • 您可以尝试我的回答,从两个 XIB 调用相同的方法。
  • 您的按钮单击事件是否在任何一个方向上触发??横向还是纵向??
  • no.. 它没有被触发,我没有使用 xib 中的文件所有者在我的 .h 文件中使用 (ctrl+dragging) 创建任何出口或操作连接。因为我给出了对象名称通过标签属性按钮,我不确定,但我认为我是对的..
  • 是的,您可以将IBAction 事件连接到按钮。这种方式行得通...

标签: iphone ios ipad uibutton xib


【解决方案1】:

确保...

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

编辑

我觉得您的视图在您设置代码的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];    
}

希望这会有所帮助。

【讨论】:

  • 我创建了没有 xib 的类,并添加了两个 xib,一个用于纵向,另一个用于横向,在两个 xib 中都有一个具有相同标签的按钮..但仍然没有触发点击事件..
  • 只是要求您确保在 xib 中除了您的按钮之外没有任何其他带有标签 1 的控件。
  • 是的,只有按钮有标签 1
  • 然后确定按钮的父视图。如果在直接根视图下,那么您的代码将起作用。如果在其他视图中,则它不会识别它。
  • 请查看我更新的答案并试试这个。我已经测试了你的代码它不起作用然后我在 changeOrientation 中转移了代码,它现在可以工作了:)
【解决方案2】:

在头文件中添加

IBOutlet UIButton *btn;

从您的 xib 文件中引用此 btn。

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

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

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

如果你没有在 nib 中添加按钮,那么不要忘记初始化并将子视图添加到视图中

你可以看这个教程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];
            }
      }

【讨论】:

  • 日志显示 btn.tag 是 1 并显示 Button Added 但仍然没有触发点击事件.. :(
【解决方案3】:

你可以像这样添加一个按钮。 将此添加到您的 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]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多