UIButton以编程方式在UITableView的一部分中创建,以隐藏/显示该部分的内容

时间:2012-03-02 19:26:30

标签: ios xcode uitableview uibutton

我以这种方式以编程方式创建了一个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中隐藏/显示特定部分内容的任务?

1 个答案:

答案 0 :(得分:1)

在回答您的问题“是否有更简单的方法”时,您可能需要查看Apple at this link的一些有效的演示代码。此代码显示了如何使用可折叠部分。我试图发展这个我自己,并遇到一些困难,然后得出结论,我的问题被这个代码中使用的方法消除了。关键是要维护一个包含每个部分信息的表,包括指向每个部分的标题视图的指针。我改编了这个演示代码,它立即工作正常。您应该能够自己编译和运行代码。

以下是一些未经请求的建议:如果您想让其他人查看并提供建议,您应该为变量选择更具描述性的名称。 dummydummy2的目的并不明显,它给人的直接印象是,提供帮助需要付出更多的努力。