4

I made a simple app in which i am loading different .xib on each orientation,

I have two xib's Portxib and Landxib, in both xibs, i dragged a button and assigned a

tag value to it as 1 in both xib's.

and i wrote this code in my viewDidLoad

UIButton *btn=(UIButton *)[self.view viewWithTag:1];
    [btn addTarget:self action:@selector(BtnClick:) forControlEvents:UIControlEventTouchUpInside];

here is the selector method,

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

Click event of UIButton is not getting fired...

OR

Is there any other way to call the same method of button from both the orientation ??

EDIT :

.h file

.m file

4

3 回答 3

6

确保...

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

编辑

我觉得你的观点viewDidLoad在你设置代码的地方没有得到认可。因此,只需在加载 nib 后注释掉该代码viewDidLoad并转换您的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];    
}

希望这可以帮助。

于 2013-03-21T12:14:25.307 回答
5

在头文件中添加

IBOutlet UIButton *btn;

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

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

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

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

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

你可以看到这个教程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];
            }
      }
于 2013-03-21T12:08:28.800 回答
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]);
}
于 2013-03-21T12:12:10.713 回答