如何以编程方式生成按钮名称按钮

问题描述:

我的CustomTableCell上有四个按钮。 按钮名,button1button2button3button4。 (在.h文件中声明)如何以编程方式生成按钮名称按钮

@property (weak, nonatomic) IBOutlet UIButton *button1; 
@property (weak, nonatomic) IBOutlet UIButton *button2; 
@property (weak, nonatomic) IBOutlet UIButton *button3; 
@property (weak, nonatomic) IBOutlet UIButton *button4; 

以下代码正常工作,并且通过重复代码生成4个像这样的按钮。

CustomTableViewCell *cell = [self.tableVIew dequeueReusableCellWithIdentifier:@"CustomCell"]; 
[cell.button1.titleLabel setFont:[UIFont systemFontOfSize:13]]; 
cell.button1.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; 
cell.button1.titleLabel.textAlignment = NSTextAlignmentLeft; 
cell.button1.titleLabel.numberOfLines = 0; 
[cell.button1 setTitle:@"button1 title" forState:UIControlStateNormal]; 
[cell.button1 setSelected:NO]; 

现在我使用的四个按钮将有四个不同的名称(不是标题)ceated阵列。

_buttonTitle = [@[@"button1 title", 
        @"button2 title", 
        @"button3 title", 
        @"button4 title"] mutableCopy]; 

所以我想为什么不在这样的for循环中生成按钮。

for (int i = 0; i <= _buttonTitle.count ; i++) { 
     NSString *buttonNumber = [NSString stringWithFormat:@"%d", i+1]; 
     NSString *buttonName = [@"button" stringByAppendingString:buttonNumber]; 
     [cell.buttonName.titleLabel setFont:[UIFont systemFontOfSize:13]]; 
     cell.buttonName.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; 
     cell.buttonName.titleLabel.textAlignment = NSTextAlignmentLeft; 
     cell.buttonName.titleLabel.numberOfLines = 0; 
//  NSLog(buttonName); 
     [cell.buttonName setTitle:_buttonTitle[i] forState:UIControlStateNormal]; 
     [cell.buttonName setSelected:NO]; 
    } 

我收到以下错误:当然

"Property 'buttonName' not found on object of type 'CustomTableViewCell *'" 

,这是有道理的cell.button1 != cell.buttonName eventhough buttonNameNSString与价值button1

于是,我问的是这个问题,我怎么可以创建一个按钮,如果我知道在.h文件中声明的按钮名称的要点?

buttonName是不是一个按钮,它是一个串。

尝试设置tag为每个按钮,像标签0按钮1,按钮2与标签1等。你可以将它设置在您的视图界面(的.xib文件)

,然后更新您的代码下面,它应该工作:

for (int i = 0; i <= _buttonTitle.count ; i++) { 
    NSString *buttonNumber = [NSString stringWithFormat:@"%d", i+1]; 
    //I removed this 
    //NSString *buttonName = [@"button" stringByAppendingString:buttonNumber]; 
    //I added this 
    UIButton* currentButton = (UIButton*)[cell viewWithTag:i]; 

    [currentButton.titleLabel setFont:[UIFont systemFontOfSize:13]]; 
    currentButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; 
    currentButton.titleLabel.textAlignment = NSTextAlignmentLeft; 
    currentButton.titleLabel.numberOfLines = 0; 
    //  NSLog(buttonName); 
    [currentButton setTitle:_buttonTitle[i] forState:UIControlStateNormal]; 
    [currentButton setSelected:NO]; 
} 

你想知道如何以编程方式创建按钮吗?如果是这样的:

UIButton *btn = [[UIButton alloc] init]; 
[btn setTitle:@"YOUR TITLE" forState:UIControlStateNormal]; 

如果你正在寻找设置一个按钮的标题和标题存储在数组中,你可以做这样的事情:

UIButton *btn = [[UIButton alloc] init]; 
[btn setTitle:[NSString stringWithFormat:@"%@", [self.yourButtonTitleArray objectAtIndex:index]] forState:UIControlStateNormal]; 

考虑你正在努力实现我建议使用运行什么如果要验证按钮的数量,则创建实时属性。有关详细信息,请参阅此Question。但是,如果您只有这四个按钮可以显示在单元格中,请不要尝试任何花哨的东西。在第一种方法中使用静态属性声明是完全可以的。