Как анимировать только одну ячейку / строку UITableView на основе чего-то вроде описания? - PullRequest
0 голосов
/ 26 февраля 2012

У меня есть описание, заголовок в ячейке. У некоторых заголовков есть описание, которых у некоторых нет. я хочу анимировать (увеличить размер) строку на основе описания, если нет описания, ячейка не должна увеличивать размер, где, как если бы было описание, ячейка должна увеличиваться. Данные заголовка и описания извлекаются из sql db. Я создал анимационную часть, у меня проблемы с увеличением размера ячейки только для части описания. - (void) tableViewUITableView *) tableView cellForRowIndexNSIndexPath *) indexPath, который я определил описание, которое получает значение из descriptionArray

- (BOOL)cellIsSelected:(NSIndexPath *)indexPath;

@end

@implementation LOAnimatedCellDemoViewController

#define kCellHeight 50.0

- (void)viewDidLoad {
    [super viewDidLoad];

    selectedIndexes = [[NSMutableDictionary alloc] init];
}

- (void)viewDidUnload {
    [selectedIndexes release];
    selectedIndexes = nil;

    [super viewDidUnload];
}

- (BOOL)cellIsSelected:(NSIndexPath *)indexPath {
    // Return whether the cell at the specified index path is selected or not
    NSNumber *selectedIndex = [selectedIndexes objectForKey:indexPath];
    return selectedIndex == nil ? FALSE : [selectedIndex boolValue];
}



#pragma mark -
#pragma mark Tableview Datasource Methods

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

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

#pragma mark -
#pragma mark Tableview Delegate Methods

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Deselect cell
    [tableView deselectRowAtIndexPath:indexPath animated:TRUE];

    // Toggle 'selected' state
    BOOL isSelected = ![self cellIsSelected:indexPath];

    // Store cell 'selected' state keyed on indexPath
    NSNumber *selectedIndex = [NSNumber numberWithBool:isSelected];
    [selectedIndexes setObject:selectedIndex forKey:indexPath]; 

    // This is where magic happens...
    [demoTableView beginUpdates];
    [demoTableView endUpdates];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    // If our cell is selected, return double height
    if([self cellIsSelected:indexPath]) {
        return kCellHeight * 2.0;
    }

    // Cell isn't selected so return single height
    return kCellHeight;
}

@end

Ответы [ 2 ]

1 голос
/ 26 февраля 2012

Попробуйте заменить didSelectRowAtIndexPath на:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Deselect cell
    [tableView deselectRowAtIndexPath:indexPath animated:TRUE];

    // Toggle 'selected' state
    BOOL isSelected = ![self cellIsSelected:indexPath];

    // Store cell 'selected' state keyed on indexPath
    NSNumber *selectedIndex = [NSNumber numberWithBool:isSelected];
    [selectedIndexes setObject:selectedIndex forKey:indexPath]; 

    // This is where magic happens...
    [demoTableView beginUpdates];

    //these two lines were added
    NSArray *array = [NSArray arrayWithObject:indexPath]; 
    [self.tableView reloadRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationNone];   

    [demoTableView endUpdates];
}

И убедитесь, что вы возвращаете правильное (большое / маленькое) представление в cellForRowAtIndexPath:, когда оно вызывается во время процесса.

0 голосов
/ 28 февраля 2012

в строке if ([self cellIsSelected: indexPath]), которую я добавил

if([self cellIsSelected:indexPath] && ![descriptionArray objectAtIndex:indexpath.row] isEqualToString:@" "]) я дал isEqualToString: @ "" причина в столбце базы данных для элементов, которые не имеют описания, я дал один пробел , чтобы он указывал описание товара отсутствует -

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