好的,直到现在我一直在.h文件中声明我的所有视图对象。例如:
UIButton *btnCustomFacebookLogin;
在我的.m文件中定义如下:
btnCustomFacebookLogin = [UIButton buttonWithType:UIButtonTypeCustom];
btnCustomFacebookLogin.backgroundColor = [UIColor darkGrayColor];
btnCustomFacebookLogin.frame = CGRectMake(0,0,180,40);
btnCustomFacebookLogin.center = CGPointMake(self.view.center.x, 200);
[btnCustomFacebookLogin setTitle: @"Facebook Login" forState: UIControlStateNormal];
[btnCustomFacebookLogin addTarget:self action:@selector(facebookLoginButtonClicked) forControlEvents: UIControlEventTouchUpInside];
[self.view addSubview:btnCustomFacebookLogin];
我的应用程序中还有一些按钮,这些按钮都在我的
中定义- (void)viewDidLoad
我从我的导师那里检查过,他告诉我所有这些按钮应该是一个单独的方法而不是在viewDidLoad中,我不知道它们应该在哪里,我在互联网上查看了一些示例代码,但是不能找到线索。定义所有按钮的正确位置是什么?因为我现在在公司工作,所以我必须遵守告诉我的惯例。
答案 0 :(得分:0)
将IBOutlets
属性保留在头文件(* .h)之外,并在View Controller的接口扩展中将其声明为实现文件(* .m)。
在您的实施文件(* .m)中:
@interface MyViewController ()
@property (nonatomic, weak) IBOutlet UIButton *myButton;
@end
请记住将属性行为nonatomic
设置为默认情况下每个属性都会获得atomic
行为,并且在使用UI对象时,不需要使它们对线程安全。将其设置为weak
,因为您不是该对象的直接所有者,其生命周期属于您的故事板(假设您使用故事板)。
Meet Doshi关于使用viewDidLoad
并在其中执行选择器,对UI元素进行初始设置是正确的。它使您的代码清晰易读。
我可以称之为:
- (void)styleUI {
//insert your code here
}
如果您发现自己以相同的方式在不同的视图控制器中设置特定的UIButton样式,那么为了避免样板代码,您可以为UIButton
创建自己的类别类别,并在一个地方指定相同的样式。
UIButton
选择UIButton
)。在实现文件(* .m)中的类别类中添加样式的方法:
- (void)map_applyFacebookStyle
// insert your code here but instead to name of your button refer to self.
self.title = @"Facebook Login";
}
通过在@interface
部分添加方法签名,在您的类别的标题文件中公开方法。
@interface UIButton (MAPStylig)
- (void)map_applyFacebookStyle;
@end
在View Controller实施文件(* .m)中导入您的类别并修改您的方法:
- (void)styleUI {
[btnCustomFacebookLogin map_applyFacebookStyle];
}
这会从@selector
上的班级类别中调出您的样式方法的UIButton
。正如您可以想象的那样,您可以从应用程序中的每个View Controller中删除大量样板代码。
答案 1 :(得分:-1)
你的导师说,“所有这些按钮应该是一个单独的方法,而不是在viewDidLoad中”。表示您将所有按钮的框架和属性设置为viewDidLoad方法。他没有说你不能将所有对象都定义为.h文件。所以他说,你已经做到了其他方法。只需使用以下代码即可。
我想,现在你这样做了: -
- (void)viewDidLoad
{
btnCustomFacebookLogin = [UIButton buttonWithType:UIButtonTypeCustom];
btnCustomFacebookLogin.backgroundColor = [UIColor darkGrayColor];
btnCustomFacebookLogin.frame = CGRectMake(0,0,180,40);
btnCustomFacebookLogin.center = CGPointMake(self.view.center.x, 200);
[btnCustomFacebookLogin setTitle: @"Facebook Login" forState: UIControlStateNormal];
[btnCustomFacebookLogin addTarget:self action:@selector(facebookLoginButtonClicked) forControlEvents: UIControlEventTouchUpInside];
[self.view addSubview:btnCustomFacebookLogin];
}
所以,只需将此代码放入一个方法并从viewDidLoad中调用此方法,如下所示: -
- (void)viewDidLoad
{
[self settingPropertiesOfButtons];
}
- (void)settingPropertiesOfButtons
{
//insert your code here..
btnCustomFacebookLogin = [UIButton buttonWithType:UIButtonTypeCustom];
btnCustomFacebookLogin.backgroundColor = [UIColor darkGrayColor];
btnCustomFacebookLogin.frame = CGRectMake(0,0,180,40);
btnCustomFacebookLogin.center = CGPointMake(self.view.center.x, 200);
[btnCustomFacebookLogin setTitle: @"Facebook Login" forState: UIControlStateNormal];
[btnCustomFacebookLogin addTarget:self action:@selector(facebookLoginButtonClicked) forControlEvents: UIControlEventTouchUpInside];
[self.view addSubview:btnCustomFacebookLogin];
}
就是这样。如果您可以在.storyboard文件或.xib中构建这些按钮,那么它会更好。