我制作了一个简单的应用,我在每个方向上加载不同的.xib
我有两个xib的Portxib
和Landxib
,在两个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
答案 0 :(得分:6)
确保......
xib
的根视图中,因为您在self.view
中找到它或确保将其置于正确的视图中,并将该视图与viewWithTag
一起使用修改强>
我觉得您在设置代码的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]);
}