UIButton隐藏属性奇怪的行为 - iOS

时间:2012-11-28 00:00:42

标签: ios uibutton

如果我的数组不是nil,我想使用以下代码隐藏按钮,但由于某种原因它无法正常工作。我在代码中看不到任何错误..请帮帮我..谢谢..

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSString *title = nil;

     HowtoUseButton = [[[CustomButton alloc] init] autorelease];

    [HowtoUseButton addTarget:self action:@selector(openLink) forControlEvents:UIControlEventTouchDown];

    HowtoUseButton.frame = CGRectMake(80.0, 140.0, 160.0, 70.0);


    [self.view addSubview:HowtoUseButton];


    if (document.count > 0){

        HowtoUseButton.hidden = YES;  // not working
        title = Title_Doc;

    }
    else if (self.documentURLs.count == 0){

        title = Title_No_Doc;
        HowtoUseButton.hidden = NO;

    }

    return title;
}

3 个答案:

答案 0 :(得分:1)

由于您在titleForHeaderInSection中使用此功能,因此可能会多次调用它。如果是这种情况,也许只有一些按钮被隐藏。

尝试更改:

HowtoUseButton = [[[CustomButton alloc] init] autorelease];
[HowtoUseButton addTarget:self action:@selector(openLink) forControlEvents:UIControlEventTouchDown];
HowtoUseButton.frame = CGRectMake(80.0, 140.0, 160.0, 70.0);
[self.view addSubview:HowtoUseButton];

为:

if (!HowtoUseButton) {
    HowtoUseButton = [[[CustomButton alloc] init] autorelease];
    [HowtoUseButton addTarget:self action:@selector(openLink) forControlEvents:UIControlEventTouchDown];
    HowtoUseButton.frame = CGRectMake(80.0, 140.0, 160.0, 70.0);
    [self.view addSubview:HowtoUseButton];
}

另外,正如其他已经回答的人所说的那样,这首先不应该在这里。在界面构建器中或在viewDidLoad中创建一次按钮,然后只需设置隐藏属性,您需要在其中进行更改。

答案 1 :(得分:0)

不是使用hidden属性,为什么不从视图中删除它?

[HowtoUseButton removeFromSuperview];

顺便说一句,我会注意到你在这里做的事情有点奇怪。如果你想在表视图部分标题中有一个按钮,那么最好的方法就是实现:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

...在您的表视图委托中。这样,您就可以完全自定义表头视图。

答案 2 :(得分:0)

您需要从titleForHeader方法中删除按钮创建部分,并将此代码保留在您班级的viewDidLoad方法中,

- (void)viewDidLoad {
   [super viewDidLoad];
   HowtoUseButton = [[[CustomButton alloc] init] autorelease];
   [HowtoUseButton addTarget:self action:@selector(openLink) forControlEvents:UIControlEventTouchDown];
   HowtoUseButton.frame = CGRectMake(80.0, 140.0, 160.0, 70.0);
   [self.view addSubview:HowtoUseButton];

由于您是在titleForHeader方法中创建它,因此它会多次创建,并且一旦创建了新引用,您将丢失对旧引用的引用。只要滚动tableview,就会调用titleForHeader方法。相反,您可以在viewDidLoad方法中创建一次并使用它。

如果您尝试将此按钮添加到表格视图标题,请使用其他答案中提到的viewForHeaderInSection