【问题标题】:Hide programmatically created UIButton for tag隐藏以编程方式为标签创建的 UIButton
【发布时间】:2013-03-05 01:56:18
【问题描述】:

目前我有 14 个按钮正在使用 for 循环以编程方式创建,代码如下:

int buttonCount = 14;
for (int i=0; i< buttonCount; i++) {             
    
//Create titleString from array object
    NSString *stringFromInt = [NSString stringWithFormat:@"%@",[arrayForRound objectAtIndex:i]];
        

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        
        [button addTarget:self
                   action:@selector(buttonSelected:)
         forControlEvents:UIControlEventTouchDown];

        [button setTitle:stringFromInt forState:UIControlStateNormal];

        button.titleLabel.font = [UIFont fontWithName:@"helvetica" size:19];
        button.tag = i;
        
        [self.view addSubview:button];
}

这非常适合创建按钮,然后我可以使用所选按钮的值填充答案框:

-(void)buttonSelected: (UIButton *)sender
{
[_buttonOne setTitle:sender.titleLabel.text forState:UIControlStateNormal];
}

但是,在填充按钮后,我想将其从屏幕上移除。如果我调用 button.hidden 它只是隐藏以编程方式创建的最后一个按钮。我知道 button.tag 并尝试使用它,但感觉我几乎需要做类似的事情:

//Hide button for tag (i know this is incorrect syntax)
button for buttonTag: 3 setHidden;

有类似的方法或方法吗?

更新

我试图隐藏的按钮是以编程方式创建的。所以我希望 _buttonOne 采用创建按钮的标题(让我们称之为 letterButton),然后从视图中隐藏 letterButton,

UIButton *yourBtn = (UIButton *)[self.button viewWithTag:3];
[yourBtn setHidden:YES];
(code posted by Oh Seung Kwon)

此代码运行良好,但它隐藏了错误的按钮集。 (隐藏 _buttonOne 而不是 letterButton)。

我想知道在 nib 中创建 12 个按钮并手动命名它们会不会更好...永远不会超过 12 个。

【问题讨论】:

    标签: ios xcode uibutton


    【解决方案1】:

    当您的按钮被点击时,您可以在操作方法的sender 参数上设置hidden 属性,这是实际被点击的按钮。这将隐藏被点击的按钮。

    - (void)buttonSelected:(UIButton *)sender {
       [_buttonOne setTitle:sender.titleLabel.text forState:UIControlStateNormal];
       [sender setHidden:YES];
    }
    

    如果您要检索带有3 标签的按钮,您可以改用以下代码:

    [[self.view viewWithTag:3] setHidden:YES];
    

    我不建议您使用 tag 属性 - 您应该使用 Interface Builder 和 IBOutletCollection

    【讨论】:

    • 嗨,Jacob,感谢您的回复,我在使用 for 循环实现 IBOutletCollection 时遇到了一点麻烦。你能否给我更多关于这方面的信息,或者我应该开始另一个问题吗?再次感谢
    • 我最终使用了 self.view 标签,我遇到的问题是标签干扰了按钮,所以我只是将 button.tag 设置为 i+10。这似乎清除了一切,谢谢
    【解决方案2】:

    这样

    UIButton *yourBtn = (UIButton *)[self.view viewWithTag:3];
    [yourBtn setHidden:YES];
    

    【讨论】:

    • 嘿哦,这似乎引发了一些错误,它也删除了错误的按钮,所以感谢您的回答,但我想我会尝试使用 Outlet Collection。 T
    • 抱歉,这段代码确实有效!但这对于我想要实现的目标来说并不完全正确,我已经更新了我的问题以反映这一点
    • 对不起,我现在才看到你的回复。
    • 我认为你得到了更好的答案。问候
    【解决方案3】:

    您可以使用此消息通过标记获取视图。

    [self.view viewWithTag:3];
    

    我们总是用宏来具体标记,就像

    #define kFirstButtonTag (100)
    

    或使用

    #define kButtonBeginTag (100)
    

    然后使用宏获取标签。

    并且在一个特殊的数字中 - 总是使用案例 0、1 或 2,以一个特殊的数字开始你的标签可以避免一些问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多