UIButton, созданный программно в разделе UITableView, чтобы скрыть/показать содержимое раздела

Я создал UIbutton программно следующим образом:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(hideOrShowWithButtonId:)forControlEvents:UIControlEventTouchDown];

Цель этой кнопки состоит в том, что при ее нажатии содержимое раздела в uitableview исчезает, а при повторном нажатии на нее содержимое возвращается. Поэтому, когда эта кнопка нажата, она вызывает функцию ниже: (ПРИМЕЧАНИЕ: self.cinemaButton, self.taxiButton и self.foodButton — это СТРОКИ, а НЕ КНОПКИ)

-(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) выходит со значением @"Показать", но при повторном нажатии кнопки она имеет значение @"Скрыть". строка self.taxibutton не меняется. Таким образом, функция способна только скрыть содержимое раздела и не показывать его снова. Любая причина, почему это происходит? Есть ли более простой способ выполнить эту задачу по сокрытию/отображению содержимого определенного раздела в UItableView?


person Guy Daher    schedule 02.03.2012    source источник


Ответы (1)


В ответ на ваш вопрос «Есть ли более простой способ» вы можете взглянуть на некоторый рабочий демонстрационный код от Apple по этой ссылке. Этот код показывает, как иметь сворачиваемые разделы. Я пытался разработать это самостоятельно и столкнулся с некоторыми трудностями, прежде чем сделать вывод, что мои проблемы были устранены методами, используемыми в этом коде. Ключевым моментом является поддержка таблицы, которая содержит информацию для каждого раздела, включая указатели на представления заголовков для каждого раздела. Я адаптировал этот демонстрационный код, и он сразу заработал нормально. Вы должны быть в состоянии скомпилировать и запустить код самостоятельно.

Вот небольшой непрошенный совет: вам следует выбирать более описательные имена для ваших переменных, если вы хотите, чтобы другие просмотрели их и дали совет. Цель dummy и dummy2 не очевидна, и сразу создается впечатление, что предложение помощи потребует больше усилий, чем следовало бы.

person Jim    schedule 02.03.2012