-1

如果我的数组不是 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;
}
4

3 回答 3

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一次创建按钮,只需在需要更改的地方设置隐藏属性。

于 2012-11-28T00:23:08.480 回答
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方法中创建它,因此它会被多次创建,一旦创建新的引用,您将失去对旧引用的引用。titleForHeader每当您滚动表格视图时,都会调用该方法。相反,您可以在您的viewDidLoad方法中创建一次并使用它。

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

于 2012-11-28T00:22:03.967 回答
0

hidden为什么不直接将其从视图中移除,而不是使用该属性?

[HowtoUseButton removeFromSuperview];

顺便说一句,我会注意到您在这里所做的事情有些奇怪。如果您想在表格视图部分标题中添加一个按钮,最好的方法可能是实现:

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

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

于 2012-11-28T00:09:56.533 回答