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