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

时间:2014-02-21 10:03:28

标签: ios objective-c uibutton

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

我有2个UIButtons,一个是使用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,但这并没有改变一件事。

2 个答案:

答案 0 :(得分:3)

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

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

but = [UIButton buttonWithType:UIButtonTypeCustom];

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

或者您应该在方法

中传递地址customizeButton:(UIButton **)but

并且在调用时使用&self.catBut

答案 1 :(得分:0)

BOOL 类型,而不是bool类型。

试试这个

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

我可以看到这个属性catBut,但我不能看到这个创造,我也没有给Outlet。检查一下。你已经尝试了一些东西,但只需通过以下方式修复。

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