Ios 创建按钮的方法

Ios 创建按钮的方法,ios,objective-c,uibutton,subview,Ios,Objective C,Uibutton,Subview,我有自定义按钮类“EHCheckBox”。我的应用程序中有很多按钮,所以我尝试优化我的代码,并在一行而不是10行中创建按钮。在我看来,在viewDidLoad中,我调用方法witch call method来创建我的按钮 -(void)viewDidLoad { ..... [self buttons]; ..... } -(void)buttons { [self addNewBut:pcswitch Title:@" Switch" Column:3 Positio

我有自定义按钮类“EHCheckBox”。我的应用程序中有很多按钮,所以我尝试优化我的代码,并在一行而不是10行中创建按钮。在我看来,在viewDidLoad中,我调用方法witch call method来创建我的按钮

-(void)viewDidLoad
{
  .....
  [self buttons];
  .....
}

-(void)buttons
{
    [self addNewBut:pcswitch Title:@"   Switch" Column:3 Position:5 Dropable:NO Hide:NO]
}
-(void)addNewBut:(EHCheckBox*)checkBoxName Title:(NSString*)checkBoxTitle Column:(int)checkBoxColumn Position:(int)checkBoxPosition Dropable:(BOOL)checkBoxDropable Hide:(BOOL)hide
{
    checkBoxName = [EHCheckBox buttonWithType:UIButtonTypeCustom];
    [checkBoxName setTitle:NSLocalizedString(checkBoxTitle, @"") forState:UIControlStateNormal];
    checkBoxName.hidden = hide;

    if (checkBoxDropable) {
        [checkBoxName setBackgroundImage:[UIImage imageNamed:@"CheckButton1.png"] forState:UIControlStateNormal];
        [checkBoxName setBackgroundImage:[UIImage imageNamed:@"CheckButtonSelect1.png"] forState:UIControlStateSelected];
    }else{
        [checkBoxName setBackgroundImage:[UIImage imageNamed:@"CheckButton.png"] forState:UIControlStateNormal];
        [checkBoxName setBackgroundImage:[UIImage imageNamed:@"CheckButtonSelect.png"] forState:UIControlStateSelected];
    }

    int firstColX = 45;
    int firstColY = 125;
    int width = 140;
    int height = 36;
    int widhtTwo = 18;

    int x = firstColX + (checkBoxColumn - 1)*(width+widhtTwo);
    int y = firstColY + (checkBoxPosition - 1)*(height);

    checkBoxName.frame = CGRectMake(x, y, 140, 50);
    [self.view addSubview:checkBoxName];
}

hide=是,因为我有其他方法可以取消隐藏按钮,但它们不起作用,因为在视图中,我的按钮是nil,我不明白为什么?也许我的方法应该返回这些按钮?谢谢。

我无法理解您的目标和代码,但我确实建议使用类别。在这种情况下,系统应该看起来更好、更有条理

例如,您可以采用这种方法

#import <UIKit/UIKit.h>

@interface UIButton (Factory)

+ (UIButton*)buttonWithTitle:(NSString*)title column:(int)column position:(int)position dropable:(BOOL)dropable hide:(BOOL)hide;

@end
您可以按如下方式使用此类别。您需要导入
#导入“UIButton+Factory.h”


一张便条。如果将
0
传递到列和位置,则按钮将假定为负
x
y
。因此,你不会看到它

addNewBut:…
方法的开头设置一个断点,然后从那里开始。@dan78“…鉴于我的按钮为零…”这些,意味着我使用了调试。
pcswitch
?你的代码启发了我,我编写了类的构造函数,都很有效,非常感谢!我不想一直写addSubView。。。所以我对这些方法进行了现代化,但是我有一些关于选择器的问题,它一直无法被识别,因为我知道它试图在我的视图中调用,我的方法initWithTitle:(NSString*)checkBoxTitle列:(int)checkBoxColumn位置:(int)checkBoxPosition Dropable:(BOOL)checkBoxDropable隐藏选择器:(SEL)action viewController:对不起,你能解释一下你的意思吗?我不明白…@RomanSimenok
#import "UIButton+Factory.h"

@implementation UIButton (Factory)

+ (UIButton*)buttonWithTitle:(NSString*)title column:(int)column position:(int)position dropable:(BOOL)dropable hide:(BOOL)hide {

    UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
    //[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [button setTitle:NSLocalizedString(title, @"") forState:UIControlStateNormal];
    [button setHidden:hide];

    if (dropable) {
        [button setBackgroundImage:[UIImage imageNamed:@"CheckButton1.png"] forState:UIControlStateNormal];
        [button setBackgroundImage:[UIImage imageNamed:@"CheckButtonSelect1.png"] forState:UIControlStateSelected];
    } else {
        [button setBackgroundImage:[UIImage imageNamed:@"CheckButton.png"] forState:UIControlStateNormal];
        [button setBackgroundImage:[UIImage imageNamed:@"CheckButtonSelect.png"] forState:UIControlStateSelected];
    }

    int firstColX = 45;
    int firstColY = 125;
    int width = 140;
    int height = 36;
    int widhtTwo = 18;

    int x = firstColX + (column - 1)*(width+widhtTwo);
    int y = firstColY + (position - 1)*(height);
    button.frame = CGRectMake(x, y, 140, 50);

    return button;
}

@end
UIButton* button = [UIButton buttonWithTitle:@"test" column:1 position:1 dropable:YES hide:NO];
[viewWhereYouWantToAddTheButton addSubview:button];