我以这种方式以编程方式创建了一个UI按钮:
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(hideOrShowWithButtonId:)forControlEvents:UIControlEventTouchDown];
此按钮的目的是当按下它时,uitableview中某个部分的内容消失,当点击它时,内容会回来。 因此,当单击此按钮时,它将调用以下函数: (注意:self.cinemaButton,self.taxiButton和self.foodButton是STRINGS而不是BUTTONS)
-(void)hideOrShowWithButtonId:(id)sender;
{
NSArray *dummy=[[[NSArray alloc] initWithObjects:nil] autorelease];
NSArray *dummy2=[[NSArray alloc] initWithObjects:self.cinemaButton,self.taxiButton,self.foodButton,nil];
NSLog(@"%@",self.taxiButton);
if([[dummy2 objectAtIndex:[sender tag]]isEqual:@"Hide"])
{
NSLog(@"Want to hide");
[self.sections removeAllObjects];
switch ([sender tag]) {
case 0:
[self.sections addObject:dummy];
[self.sections addObject:self.taxiFavorite];
[self.sections addObject:self.foodFavorite];
[self.tableView reloadData];
self.cinemaButton=[NSString stringWithString:@"Show"];
break;
case 1:
[self.sections addObject:self.cinemaFavorite];
[self.sections addObject:dummy];
[self.sections addObject:self.foodFavorite];
[self.tableView reloadData];
self.taxiButton=[NSString stringWithString:@"Show"];
break;
case 2:
[self.sections addObject:self.cinemaFavorite];
[self.sections addObject:self.taxiFavorite];
[self.sections addObject:dummy];
[self.tableView reloadData];
self.foodButton=[NSString stringWithString:@"Show"];
break;
}
NSLog(@"%@",self.taxiButton);
}
else
{
NSLog(@"Want to show");
switch ([sender tag]) {
case 0:
[self.sections replaceObjectAtIndex:0 withObject:self.cinemaFavorite];
[self.tableView reloadData];
self.cinemaButton=[NSString stringWithString:@"Hide"];
break;
case 1:
[self.sections replaceObjectAtIndex:1 withObject:self.taxiFavorite];
[self.tableView reloadData];
self.taxiButton=[NSString stringWithString:@"Hide"];
break;
case 2:
[self.sections replaceObjectAtIndex:2 withObject:self.cinemaFavorite];
[self.tableView reloadData];
self.foodButton=[NSString stringWithString:@"Hide"];
break;
}
}
[dummy2 release];
NSLog(@"%@",self.taxiButton);
}
这个函数的问题在于字符串(例如在我的情况下:self.taxi)以@“Show”值退出,但是当再次按下该按钮时,它的值为@“Hide” 字符串self.taxibutton的值不会改变。因此该功能只能隐藏该部分的内容而不能再显示它们。出现这种情况的原因是什么? 有没有更简单的方法来执行在UItableView中隐藏/显示特定部分内容的任务?
答案 0 :(得分:1)
在回答您的问题“是否有更简单的方法”时,您可能需要查看Apple at this link的一些有效的演示代码。此代码显示了如何使用可折叠部分。我试图发展这个我自己,并遇到一些困难,然后得出结论,我的问题被这个代码中使用的方法消除了。关键是要维护一个包含每个部分信息的表,包括指向每个部分的标题视图的指针。我改编了这个演示代码,它立即工作正常。您应该能够自己编译和运行代码。
以下是一些未经请求的建议:如果您想让其他人查看并提供建议,您应该为变量选择更具描述性的名称。 dummy
和dummy2
的目的并不明显,它给人的直接印象是,提供帮助需要付出更多的努力。