无法隐藏以编程方式创建的 UIButton

Posted

技术标签:

【中文标题】无法隐藏以编程方式创建的 UIButton【英文标题】:Cannot hide programmatically created UIButton 【发布时间】:2014-02-21 10:03:28 【问题描述】:

这个问题让我困惑了几天。

我有 2 个 UIButton,一个使用 Storyboard 创建,一个以编程方式创建。

当我按下其中一个按钮时,我会转到一种方法,该方法同时隐藏以编程方式构建的按钮和情节提要按钮,但只有情节提要按钮消失,而以编程方式构建的按钮仍然存在。我不仅尝试隐藏而且更改以编程方式构建的按钮的框架,但无济于事。 这是使用的代码:

@property (strong, nonatomic) UIButton *catBut;
@property (weak, nonatomic) IBOutlet UIButton *whenButton;
....
....
-(void)viewDidLoad 
....
    [self customizeButton:self.catBut withFrame:CGRectMake(165, 113, 135, 50)
          andAction:@selector(selectedCat) andColor:[UIColor belizeHoleColor] 
          andTag:2 andImage:@"coffee-64.png" andText:@"Cafes" andAlignmentLeft:YES];
....


- (void)customizeButton:(UIButton *)but withFrame:(CGRect)rect andAction:(SEL)action
                        andColor:(UIColor *)col andTag:(NSUInteger)tag 
                        andImage:(NSString *)imageName 
                        andText:(NSString *)buttonText 
                        andAlignmentLeft:(BOOL)alignLeft 
    but = [UIButton buttonWithType:UIButtonTypeCustom];
    [but setFrame:rect];
    [but setTitle:buttonText forState:UIControlStateNormal];
    but.tag = tag;
    but.titleLabel.numberOfLines = 0;
    but.titleLabel.font = [UIFont boldFlatFontOfSize:18]; 
    [but setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
    CGFloat spacing = 10; // the amount of spacing to appear between image and title
    but.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    but.imageEdgeInsets = UIEdgeInsetsMake(0, spacing, 0, 0);
    but.titleEdgeInsets = UIEdgeInsetsMake(0, spacing*2, 0, 0);
    [but setTitleColor:[UIColor cloudsColor] forState:UIControlStateNormal];
    [but setTitleColor:[UIColor cloudsColor] forState:UIControlStateHighlighted];
    [but addTarget:self action:action forControlEvents:UIControlEventTouchUpInside];
    [self.buttonsView addSubview:but];

....
- (void)selectedCat 
    self.catBut.hidden = YES;
    self.whenButton.hidden = YES;

为什么只有 Storyboard 按钮符合 UI 更改?有什么我想念的吗?我曾尝试取消 AutoLayout,但这并没有改变任何事情。

【问题讨论】:

【参考方案1】:

问题在于您的方法中传递的参数 (customizeButton:(UIButton *)but)。

将您的代码更改为此并检查

but = [UIButton buttonWithType:UIButtonTypeCustom];

   self.catBut = [UIButton buttonWithType:UIButtonTypeCustom];
......
[self.buttonsView addSubview:self.catBut];

或者你应该在方法中传递地址customizeButton:(UIButton **)but

在调用时使用&self.catBut

【讨论】:

我有一种预感,这与 UIButton 指针的传递有关。 哇,太烦人了。正在破坏我的大脑。因为我总是做 skipButton = [[skipButton alloc] initWithFrame:CGRectMake(self.frame.size.width/2-skipButtonImage.size.width/4.0, 966.0/2.0, skipButtonImage.size.width/2, skipButtonImage.size.height /2.0)];太烦人了。【参考方案2】:

它是 BOOL 类型,而不是 bool 类型。

试试这个

self.catBut.hidden = YES;
self.whenButton.hidden = YES;

我可以看到这个属性catBut,但是我看不到这个属性,我也没有给Outlet。检查这个。您已经尝试了一些方法,但只需通过以下行进行修复。

[self.buttonsView addSubview:but];
self.catBut = but;

【讨论】:

感谢 iMani,但这不是问题所在。我会相应地修改代码。

以上是关于无法隐藏以编程方式创建的 UIButton的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建的 UITextField 隐藏了其他控件

隐藏以编程方式为标签创建的 UIButton

隐藏以编程方式创建的自动完成 UITableView

以编程方式创建 asp:Button?

如何以编程方式显示/隐藏导航抽屉

如何以编程方式在按钮点击时隐藏 UIPickerview?