2014-01-15 3 views
0

Я пытаюсь изменить размер заголовка раздела в соответствии с выбором в заголовках UISegmentedControl. По какой-то причине он просто не хочет работать. Я пробовал с [self.tableView beginUpdates]; и [self.tableView endUpdates]; раньше, вокруг и после кода изменения высоты, но он просто действует странно.Изменение размера заголовка раздела в UITableViewController не работает должным образом

Я получаю его, чтобы скрыть и показать содержимое, но, похоже, выделяет разную высоту для представления, даже если предположить, что размер заголовка должен быть меньше.

Это то, что происходит: https://dl.dropboxusercontent.com/u/3077127/Problem3.mov

Это мой код:

typedef enum { 
    kSearchTypeFrom = 0, 
    kSearchTypeTo 
} kSearchType; 

@interface MainVC() 

@property (nonatomic, strong) FilterVC *filterView; 
@property (nonatomic, assign) kSearchType searchType; 

@end 

@implementation MainVC 

@synthesize filterView = _filterView; 
@synthesize searchType = _searchType; 

[...] 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    self.searchType = kSearchTypeFrom; 

    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return 1; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; 
    } 

    // Configure the cell... 
    [cell.detailTextLabel setText:@"Test"]; 

    return cell; 
} 

- (UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    if (!self.filterView) { 
     self.filterView = [[FilterVC alloc] init]; 
     [self.filterView.view setBackgroundColor:self.navigationController.navigationBar.barTintColor]; 
    } 

    [self.filterView.segment setSelectedSegmentIndex:self.searchType]; 

    [self.filterView.segment addTarget:self action:@selector(didChangeSegmentSelection:) forControlEvents:UIControlEventValueChanged]; 

    return self.filterView.view; 
} 

- (float)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    if (self.searchType == kSearchTypeFrom) 
    { 
     return 130; 
    } 
    else { 
     return 100; 
    } 
} 

#pragma mark - Height change table section 

- (void)didChangeSegmentSelection:(UISegmentedControl*)segment 
{ 
    [self.tableView beginUpdates]; 

    self.searchType = segment.selectedSegmentIndex; 

    NSLog(@"Selected: %d", segment.selectedSegmentIndex); 

    if (segment.selectedSegmentIndex == 0) 
    { 
     [self.filterView.changeToText setHidden:NO]; 
     [self.filterView.changeToButton setHidden:NO]; 

     [self.filterView.fromButton setUserInteractionEnabled:NO]; 
    } 
    else { 
     [self.filterView.changeToText setHidden:YES]; 
     [self.filterView.changeToButton setHidden:YES]; 

     [self.filterView.fromButton setUserInteractionEnabled:YES]; 
    } 

    [self.tableView endUpdates]; 
    [self.filterView.view needsUpdateConstraints]; 
} 

[...] 

FilterVC класс не более чем UIViewController, содержащий следующее:

Что такое это то, что я делаю неправильно?

+0

Ваша ссылка раздаточная, кажется, не будет действительным. –

+0

Извините ... праздник проект .. и плохой Wi-Fi соединение на курорте. Не загрузился. Я снова пытаюсь. –

+0

@TimothyMoose Файл загружен и должен работать. Спасибо, что заметили. –

ответ

0

в качестве альтернативы пытается оживить, вы можете попробовать обновить таблицу, используя следующие:

- (void)didChangeSegmentSelection:(UISegmentedControl*)segment 
{ 
    //[self.tableView beginUpdates]; 

    self.searchType = segment.selectedSegmentIndex; 

    NSLog(@"Selected: %d", segment.selectedSegmentIndex); 

    if (segment.selectedSegmentIndex == 0) 
    { 
     [self.filterView.changeToText setHidden:NO]; 
     [self.filterView.changeToButton setHidden:NO]; 

     [self.filterView.fromButton setUserInteractionEnabled:NO]; 
    } 
    else { 
     [self.filterView.changeToText setHidden:YES]; 
     [self.filterView.changeToButton setHidden:YES]; 

     [self.filterView.fromButton setUserInteractionEnabled:YES]; 
    } 

    //[self.tableView endUpdates]; 
    [self.tableView reloadData]; 
    [self.filterView.view needsUpdateConstraints]; 
} 

EDIT:

Как о переменной для отслеживания высоты? Это неряшливый код, но если концепция работает, вы можете реорганизовывать его:

// Declare a variable 
@proprty (strong, nonatomic) float headerHeight; 

// Use that variable for defining the height 
- (float)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    if (self.searchType == kSearchTypeFrom) 
    { 
     headerHeight = 130; 
    } 
    else { 
     headerHeight = 100; 
    } 

    return headerHeight 
} 

Затем измените эту переменную:

- (void)didChangeSegmentSelection:(UISegmentedControl*)segment 
{ 
    [self.tableView beginUpdates]; 

    self.searchType = segment.selectedSegmentIndex; 

    // Change the variable used for the header height 
    if (self.searchType == kSearchTypeFrom) 
    { 
     headerHeight = 130; 
    } 
    else { 
     headerHeight = 100; 
    } 

    NSLog(@"Selected: %d", segment.selectedSegmentIndex); 

    if (segment.selectedSegmentIndex == 0) 
    { 
     [self.filterView.changeToText setHidden:NO]; 
     [self.filterView.changeToButton setHidden:NO]; 

     [self.filterView.fromButton setUserInteractionEnabled:NO]; 
    } 
    else { 
     [self.filterView.changeToText setHidden:YES]; 
     [self.filterView.changeToButton setHidden:YES]; 

     [self.filterView.fromButton setUserInteractionEnabled:YES]; 
    } 

    [self.tableView endUpdates]; 
    [self.filterView.view needsUpdateConstraints]; 
} 
+0

Это работает, однако ... Мне нравится анимация, которая является частью того, что я пытаюсь выполнить. –

+0

Еще одна попытка ... см. Мое редактирование выше –

+0

Я пробовал это ... но, к сожалению, такой же результат –

Смежные вопросы