这是我的头脑: - )
我在UITableView
内部有一个功能齐全的CoreData Populated UIViewController
,我已经成功实现了“刷卡删除选项”(这很简单),我还可以使用编辑按钮删除单个实例红圈圈出现的地方。
我的问题是,我认为这是因为我有一个CustomCell,当我按下编辑按钮时,UILabels
不会向右移动。
我尝试过使用-(void)layoutSubViews
和其他几个,但没有任何作用。
我已为我的cellForRowAtIndexPath
发布了我的代码。这是我的应用程序中的注释部分的一部分。此代码有效,我只需要知道当我进入编辑模式时如何移动标签?
感谢您提供的建议和建议: - )
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"Cell";
MNCustomCell *cell = [_mainTableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
if (cell == nil) {
cell = [[MNCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
//cell.textLabel.text = [_tableArray objectAtIndex:indexPath.row];
MNotes *mnotes = [[self fetchedResultsController] objectAtIndexPath:indexPath];
cell.noteTitle.text = mnotes.noteTitleString;
cell.noteSummary.text = mnotes.mainNoteString;
mnotes.createDate = [[NSDate alloc] init];
SORelativeDateTransformer *relativeDateTransformer = [[SORelativeDateTransformer alloc] init];
NSString *relativeDate = [relativeDateTransformer transformedValue:mnotes.createDate];
cell.noteDate.text = relativeDate;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
-
//This is the Custom Cell
@interface MNCustomCell : UITableViewCell
{
}
@property (strong, nonatomic) IBOutlet UILabel *noteTitle;
@property (strong, nonatomic) IBOutlet UILabel *noteDate;
@property (strong, nonatomic) IBOutlet UITextView *noteSummary;
@end
-
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// Initialization code
[self.contentView addSubview:_noteTitle];
[self.contentView addSubview:_noteSummary];
[self.contentView addSubview:_noteDate];
}
return self;
}
答案 0 :(得分:9)
其他解决方案可能会有效,但这种方式会自动为您完成动画。
MNCustomCell
不会根据单元格的当前状态重新布局视图,但是如果将标签添加到单元格的contentView中,它将会。
以下示例将移动标签,使其不会干扰删除按钮。
MNCustomCell.m
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
mainLabel = [[[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 220.0, 15.0)]];
mainLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:mainLabel];
答案 1 :(得分:1)
在自定义单元格类中实现以下方法。
- (void)willTransitionToState:(UITableViewCellStateMask)state
和
- (void)didTransitionToState:(UITableViewCellStateMask)state
并相应地移动您的标签。
应该是
- (void)willTransitionToState:(UITableViewCellStateMask)state {
[super willTransitionToState:state];
if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask) {
label.frame = ...
}
}
修改强>
- (void)willTransitionToState:(UITableViewCellStateMask)state {
[super willTransitionToState:state];
// label.hidden = YES;
// label.alpha = 0.0;
}
- (void)didTransitionToState:(UITableViewCellStateMask)state {
[super didTransitionToState:state];
if (state == UITableViewCellStateShowingDeleteConfirmationMask) {
[UIView beginAnimations:@"anim" context:nil];
label.frame = leftFrame;
[UIView commitAnimations];
} else if (state == UITableViewCellStateDefaultMask) {
[UIView beginAnimations:@"anim" context:nil];
label.frame = rightFrame;
[UIView commitAnimations];
}
}
答案 2 :(得分:0)
这是一个hack,但对我而言唯一有效的方法是放入一个隐藏的图像并限制其标签。
例如:
我在UITableViewCell中有一个UILabel,当我在屏幕上和屏幕上对表格进行动画处理时,该UILabel不会随单元格一起移动。.但是其他单元格工作得很好。我尝试了一切。
我最终将图像放置在标签的左侧(就像其他单元格一样),并从标签到固定宽度的图像添加了约束,并从图像的左侧添加了对容器的约束。
这解决了我的问题,现在标签随单元一起动画了。
我不确定标签上正在发生什么混乱的布局,但是我尝试了所有内容模式,并在超过两个小时的时间内进行了设置播放,