строка не отменяется в анимации ячейки UITableview - PullRequest
0 голосов
/ 27 февраля 2012
- (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];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    // Deselect cell
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    // 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...
    [beveragesTableView beginUpdates];
    [beveragesTableView endUpdates];

    [selectedIndexes removeAllObjects];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    // If our cell is selected, return double height
    if ([self cellIsSelected:indexPath] && ![[descriptionTypeArray objectAtIndex:indexPath.row] isEqualToString:@" "]) 
    {
        return kCellHeight * 2.0;
    }
    // Cell isn't selected so return single height
    return  kCellHeight;
}

selectedIndexes - это объект NSMutableDictonary, который объявлен в файле .h. Я создал табличное представление, в котором он анимируется на основе описания, присутствующего в ячейке, или нет. Во время анимации, если я выбираю строку, размер строки увеличивается икогда я нажимаю на него еще раз, размер строки должен вернуться к нормальной высоте, я могу сделать это только при выборе другой строки / ячейки, я хочу, чтобы ячейка вернулась к нормальной высоте, когда я нажимаю на выбранную строку.

1 Ответ

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

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

Обратите внимание, что нет необходимости вызывать beginUpdates/endUpdates.

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (nonatomic, strong) IBOutlet UITableView *tableView;

@property (nonatomic, strong) NSIndexPath *lastSelectedCell;;

@end

ViewController.m

#import "ViewController.h"

@implementation ViewController

@synthesize tableView = _tableView;
@synthesize lastSelectedCell = _lastSelectedCell;;

#pragma mark - UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return 100;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];

    if (cell == nil)  {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyIdentifier"];
    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.textLabel.text = [NSString stringWithFormat:@"row %d %@",indexPath.row, ([indexPath compare:_lastSelectedCell] == NSOrderedSame)?@"S":@"-"];

    return cell;
}

#pragma mark - UITableViewDelegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"S: %d", indexPath.row);

    if (([indexPath compare:_lastSelectedCell] == NSOrderedSame)) {
        _lastSelectedCell = nil;
    } else {
        [self setLastSelectedCell: indexPath];
    }

    [tableView reloadData];
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {


    return  ([indexPath compare:_lastSelectedCell] == NSOrderedSame)?80.0:40.0;
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    _tableView.dataSource = self;
    _tableView.delegate = self;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    _tableView = nil;
    _lastSelectedCell = nil;
}

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