UIButton создается программно в разделе UITableView, чтобы скрыть / показать содержимое раздела - PullRequest
0 голосов
/ 02 марта 2012

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

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

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

1 Ответ

1 голос
/ 02 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...