使用Objective-C
我有一个可以刷卡的单元格表(例如,使用this post进行逻辑上的一些更改)。目前我可以刷一下细胞,然后在翻转桌子之后就可以了解状态"将被重置为"关闭"。我想实现一些"内存"用于存储每个单元的最后状态的机制。
我如何尝试这样做 - 在单元类创建协议中,其中实现2获取单元格的当前indexPath并将其添加到NSMutableSet的方法,并在呈现之前,控制器检查此单元格是否已经在集合中 - 设置所需状态
我为viewController和tableView以及tableViewCell使用单独的.xib文件。
代码 - cell.h
类文件:
@protocol PEDoctorsViewTableViewCellDelegate
@optional
//buttonAction
- (void)buttonDeleteAction;
//method for closing cell with swipe
- (void)cellDidSwipedIn: (UITableViewCell*)cell;
//method for opening cell with swipe
- (void)cellDidSwipedOut:(UITableViewCell *)cell;
@end
@interface PEDoctorsViewTableViewCell : UITableViewCell <PEDoctorsViewTableViewCellDelegate>
@property (strong, nonatomic) id <PEDoctorsViewTableViewCellDelegate> delegate;
//method for protocol PEDoctorsViewTableViewCellDelegate
- (void)setCellSwiped;
@end
cell.m
档案
...
//add some code for handling reuse of cells
//fixing issue with not remembeering of cell's state
//close all cells during flipping tableView
- (void)prepareForReuse{
[super prepareForReuse];
//close all cells before showing
self.viewDoctorsNameView.frame = CGRectMake(0, 0, self.viewDoctorsNameView.frame.size.width, self.viewDoctorsNameView.frame.size.height);
}
viewController with tableView class.m
#pragma mark - PEDoctorsViewTableViewCellDelegate
- (void)cellDidSwipedOut:(UITableViewCell *)cell{
NSIndexPath * currentOpenedCellIndexPath = [self.tableView indexPathForCell:cell];
[self.currentlySwipedAndOpenesCells addObject:currentOpenedCellIndexPath];
}
- (void)cellDidSwipedIn:(UITableViewCell *)cell{
[self.currentlySwipedAndOpenesCells removeObject:[self.tableView indexPathForCell:cell]];
}
- (void)buttonDeleteAction {
NSLog(@"delete action");
}
并检查- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法,如
if ([self.currentlySwipedAndOpenesCells containsObject:[self.tableView indexPathForCell:cell]]){
[cell setCellSwiped];
}
这个班也有
//place to store set of opened cells
@property (strong, nonatomic) NSMutableSet * currentlySwipedAndOpenesCells;
在- (void)viewDidLoad
初始化。
结果 - 我得到了所有重置位置的单元格。
- (void)prepareForReuse
方法中的代码 - 根据方法的变化更改单元格的位置 - 这部分工作正常。 NSLog
中添加对象之前添加一些NSMuatbaleSet
方法,然后重新创建单元格(想想可能数据丢失) - 结果 - 在将对象添加到集合期间 - 所有看起来都好:< / LI>
在重新创建过程中 - 看起来也可以:
但未显示表格中的更改。我尝试检查保存期间捕获的对象 -
在接下来开始重新创建过程的小翻转之后:
据我了解 - 同一个单元格现在是一个新对象。还尝试向单元格添加一些BOOL属性以控制和比较它的状态 - 结果相同 - 每次都是新单元格。
知道我做错了吗?