IOS通UIbuton到方法作为参考

问题描述:

在view.h我声明IOS通UIbuton到方法作为参考

@property (retain, strong) UIButton *btn; 

在view.m予先有:

@synthesize btn; 

,然后在执行我在这呼叫的方法其他类:

[self.view addSubview:[otherclass getTestBtn:btn]]; 

这一行后,在我的view.m,我尝试登录该文本在这样的按钮:

NSLog(@"btn.titleLabel.text = %@", btn.titleLabel.text); 

不幸的是,日志说:

btn.titleLabel.text = (null) 

在其他class.m我实现的方法是这样的:

btn    = [[UIButton alloc] initWithFrame:CGRectMake(70, 340, 100, 25)]; 
[btn setTitle:@"HELLO" forState:UIControlStateNormal]; 
return btn; 

在模拟器我看到按钮显示文本“你好”。但从view.m来看,按钮中的文本似乎无法访问。为什么? 我很害怕从view.m传递给其他class.m的按钮没有通过引用传递。因此view.m中的按钮不受其他类中的方法的影响。这是原因吗?如果是:如何通过按钮作为参考?我用&字符尝试过。但编辑显示错误。

+0

更改声明:'@property(nonatomic,strong)UIButton * btn;' – 2014-09-18 20:04:13

+0

它仍然在调试区域显示NULL。 – user3355182 2014-09-18 20:11:53

+0

请提供更完整的代码示例。您现有的示例引用了'btn2',我们可以看到它没有定义。如果没有准确的看法,我们无法帮助您。 – Jonah 2014-09-18 20:16:04

如果你想获得该按钮从其他类返回,那么你需要将其分配给你的财产 -

self.btn = [otherClass getTestBtn]; 
[self.view addSubView:self.btn]; 

此外,你应该strong而不是retain为@dimimpou说,你不要除非要使用特定的备份变量名称,否则还需要@synthesize

+0

是的,我猜这是最简单的方法。事情是,我实际上从view.m请求otherclass.m另一个视图*,其中包含按钮*。所以现在不太可行。我需要改变代码的设计。我希望其他班级照顾所有图形元素,并让view.m处理按钮上的点击等。 – user3355182 2014-09-18 20:16:59

+0

听起来好像你想要一个委托模式,使用'view.m'充当'otherclass中的对象的委托'。但是你的问题中的代码不会将任何内容分配给'btn'属性,这就是为什么它是零。 – Paulw11 2014-09-18 20:19:59

+0

是否将view.m作为委托给其他类中的方法传递的? – user3355182 2014-09-18 20:21:57