【问题标题】:How to generate the button name programatically for buttons如何以编程方式为按钮生成按钮名称
【发布时间】:2014-09-11 07:41:49
【问题描述】:

我的 CustomTableCell 上有四个按钮。 按钮名称为button1、button2、button3、button4。 (在 .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];

现在我使用四个按钮创建了一个数组,将有四个不同的名称(不是标题)。

_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 尽管buttonName 是一个NSString 的值button1。

所以我要问的问题的要点是,如果我知道 .h 文件中声明的按钮名称,我该如何创建一个按钮?

【问题讨论】:

    标签: ios


    【解决方案1】:

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

    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];
    

    【讨论】:

      【解决方案2】:

      buttonName 不是按钮,而是字符串。

      尝试为每个按钮设置tag,例如按钮1 带有标签0,按钮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];
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-09-03
          • 1970-01-01
          • 1970-01-01
          • 2013-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-25
          • 2011-09-04
          相关资源
          最近更新 更多