1

最新の SDK を使用して iOS アプリケーションを開発しています。

私はUITableViewカスタムを持っていますUITableViewCell:

@interface FavouriteCell : UITableViewCell

@property (unsafe_unretained, nonatomic) IBOutlet UIImageView *selectIcon;
@property (unsafe_unretained, nonatomic) IBOutlet UILabel *favName;

@property (nonatomic) BOOL checked;

+ (NSString *)reuseIdentifier;

@end

オンselectIconにすると、通常の画像と強調表示された画像の 2 つを設定します。私がするときcell.checked = !selected;tableView:didSelectRowAtIndexPath:それは完全に機能します。

しかし、選択したすべてのセルをリセットしようとするとclearSelectedFavourites:、機能しません。

@interface FavViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, NSFetchedResultsControllerDelegate, UIAlertViewDelegate>
{
@private
    NSMutableArray* _favsSelected;
    BOOL* _isOnEditingMode;
}

// ######### FavViewController implementation ##############

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {
        self.title = NSLocalizedString(@"Favoritos", @"Favoritos");
        self.tabBarItem.image = [UIImage imageNamed:@"fav"];

        _favsSelected = [[NSMutableArray alloc] init];
        _isOnEditingMode = NO;

    }
    return self;
}

- (UITableViewCell* )tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"cellForRowAtIndexPath");
    static NSString* CellIdentifier = @"FavCell";

    FavouriteCell* cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
        [[NSBundle mainBundle] loadNibNamed:@"FavouriteCell" owner:self options:nil];
        cell = _favCell;
        self.favCell = nil;
    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.favName.font = [UIFont systemFontOfSize:15.0f];

    [self configureCell:cell atIndexPath:indexPath];

    return cell;
}

#pragma mark - UITableViewDelegate methods
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"didSelectRowAtIndexPath: %@", indexPath);

    if (tableView.isEditing)
    {
        BOOL selected = NO;

        if ((_favsSelected != nil) && ([_favsSelected count] > 0))
            selected = ([_favsSelected indexOfObject:indexPath] != NSNotFound);

        FavouriteCell* cell =
            (FavouriteCell*)[tableView cellForRowAtIndexPath:indexPath];

        NSLog(cell.checked ? @"Yes" : @"No");
        cell.checked = !selected;

        if (selected)
            [_favsSelected removeObject:indexPath];
        else
            [_favsSelected addObject:indexPath];
    }
}

- (IBAction)editFavList:(id)sender
{
  NSLog(@"edit button clicked!");
    if ([_favList isEditing])
    {
        [self clearSelectedFavourites];
        [_favList setEditing:NO animated:YES];
        [_editButton setImage:[UIImage imageNamed:@"ButtonEdit.png"] forState:UIControlStateNormal];
    }
    else
    {
        [_favList setEditing:YES animated:YES];
        [_editButton setImage:[UIImage imageNamed:@"done_button.png"] forState:UIControlStateNormal];
    }
}

- (void)clearSelectedFavourites
{
    for(int index = 0; index < [_favsSelected count]; index++)
    {
        NSIndexPath* indexPath = (NSIndexPath*)[_favsSelected objectAtIndex:index];

        FavouriteCell* cell = (FavouriteCell*)[self tableView:_favList cellForRowAtIndexPath:indexPath];
        cell.checked = NO;
    }

    [_favsSelected removeAllObjects];
}

- (void)configureCell:(FavouriteCell *)cell
          atIndexPath:(NSIndexPath *)indexPath
{
    NSManagedObject *object = nil;

    object = [self.favListFetchedResultsController objectAtIndexPath:indexPath];

    cell.favName.text = [[object valueForKey:@"name"] description];
}

なぜなのかご存知ですか?

selectIcon手動で強調表示しないように設定しようとしましたが、機能しません。そのコードは、最新のテストを行った場合です。

私もこれをテストしました: [cell setHighlighted:NO];onclearSelectedFavourites:で動作しません。

4

2 に答える 2

0

あなたはこのようにすることができます:

[tbl beginUpdates];

/* アニメーションでメソッドを呼び出します */

[tbl endUpdates];

[tbl reloadData];
于 2013-04-02T09:46:10.947 に答える