Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在自定义UITableViewCell上调用DecellRowatingIndexPath不是流体转换_Ios_Uitableview - Fatal编程技术网

Ios 在自定义UITableViewCell上调用DecellRowatingIndexPath不是流体转换

Ios 在自定义UITableViewCell上调用DecellRowatingIndexPath不是流体转换,ios,uitableview,Ios,Uitableview,这是应用程序有问题部分的设置 MyTableViewController是我的自定义UITableViewController类 TableViewController 1、2和3都是MyTableViewController类型。1和2是由tabbarcontroller控制的ViewController,3在从1中选择单元格后被推入堆栈 BaseCell是我的UITableViewCell子类 菌丝体1、2和3均为基细胞型 单元格的设置如下所示 基细胞 - (id)initWithStyle

这是应用程序有问题部分的设置

MyTableViewController是我的自定义UITableViewController类

TableViewController 1、2和3都是MyTableViewController类型。1和2是由tabbarcontroller控制的ViewController,3在从1中选择单元格后被推入堆栈

BaseCell是我的UITableViewCell子类

菌丝体1、2和3均为基细胞型

单元格的设置如下所示

基细胞

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Initialization code
    UIView *myContentView = self.contentView;

    self.gradientView = [[UIView alloc] initWithFrame:myContentView.frame];
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.colors = [UIColor grayGradient];
    [self.gradientView.layer insertSublayer:gradient atIndex:0];
    self.gradientView.backgroundColor = [UIColor blueColor];
    [myContentView addSubview:self.gradientView];
}
return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{    
[super setSelected:selected animated:animated];

// Configure the view for the selected state
if (selected) {
    self.gradientView.layer.hidden = TRUE;
} else {
    self.gradientView.layer.hidden = FALSE;
}
}

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
[super setHighlighted:highlighted animated:animated];

// Configure the view for the highlighted state
if (highlighted) {
    self.gradientView.layer.hidden = TRUE;
} else {
    self.gradientView.layer.hidden = FALSE;
}
}

-(UILabel *)newLabelWithColor:(UIColor *)incomingColor font:(UIFont *)incomingFont
{
UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectZero];
newLabel.backgroundColor = [UIColor clearColor];
newLabel.opaque = YES;
newLabel.textColor = incomingColor;
newLabel.highlightedTextColor = [UIColor whiteColor];
newLabel.font = incomingFont;
return newLabel;
}
因此,延伸基本单元的每个单元都具有渐变背景。Cell1、2和3继续以类似的方式向contentView添加更多对象。每个单元格都是为不同的目的定制的,所有单元格都遵循相同的格式

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Initialization code
    UIView *myContentView = self.contentView;

    self.someLabel = [self newLabelWithColor:[UIColor blueColor] font:[UIFont boldSystemFontOfSize:12]];
    [myContentView addSubview:self.someLabel];

    self.someView = [UIView] alloc] init];
    [myContentView addSubview:self.someView];
}
return self;
}

- (void)layoutSubviews
{
   //Layout any views necessary
}

- (void)setupCell
{
     self.someLabel = @"Placeholder Text";
     self.someView.backGroundColor = [UIColor redColor];
}
假设标签只是单元格中的一个标题,视图是单元格左侧的一个小条,指示状态(实际代码具有确定不同颜色/状态的逻辑)

最后一点信息是MyTableViewController似乎不想自己进行单元格取消选择。我在任何地方都没有ClearSelectionInviewMillAppear=NO(默认状态为YES),但当我返回到TableViewController1、2中的一个时,单元格仍处于选中状态。奇怪的是,3不参与这种行为,我也不明白为什么。于是我实施了

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}
取消选择也可以。如果我把它放在视图中,它就会出现,它不工作。所以我的第一个问题是,有人知道为什么会发生这种行为吗?UITableViewController的标准行为是使单元格高亮显示,然后在返回时取消选择该单元格,以便提醒用户他们已选择的内容,如Contacts中所示。我想知道这个问题是否会导致我的下一个问题,也就是这篇文章的主题

取消选择时,单元格看起来很糟糕。流程如下:返回TableView->单元格在选定状态下以蓝色高亮显示->单元格返回高亮显示状态(所有文本为白色,背景为渐变色,self.someView仍然不可见)->单元格返回正常状态(文本为正常颜色,self.someView重新出现)。过渡完全不是流体,您可以清楚地看到单元在这些状态中移动,在这些状态中,单元会随着蓝色褪色和正常文本颜色的出现而平滑过渡


这里有大量的信息,我通过写这篇文章已经了解了很多,但是我仍然不知道这是不是取消选择的问题,或者是我设置单元格的方式的问题,或者可能是我覆盖setSelected和setHighlighted的问题。谢谢你的帮助,考虑到这里的内容量,我真的很感激。

谢谢@TheJer提出这个好问题。我不知道为什么tableView不关心“ClearSelectionInviewWillAppear”,但我通常在“didSelectRowAtIndexPath”方法中调用“Decelrowatindexpath”方法。当按下另一个ViewController时,它非常平滑,并且在几年后对我来说效果很好。@iGranDav你知道你没有遵循HIG,对吧?@iGranDav正如我提到的,请查看Contacts应用程序,或者任何具有tableview的Apple应用程序,并在返回到包含tableview的视图后查看单元格如何取消选择自身。如果在DidSelectRowatineXpath中取消选择,则不会发生无缝转换。Cell1、2和3
initWithStyle
方法的代码不完整,可以扩展吗?@a-Live我添加了有关如何设置单元格的更多信息。对于这个好问题,在LayoutSubViewsHanks@TheJer中有一个继承自BaseCell和general setup的方法。我不知道为什么tableView不关心“ClearSelectionInviewWillAppear”,但我通常在“didSelectRowAtIndexPath”方法中调用“Decelrowatindexpath”方法。当按下另一个ViewController时,它非常平滑,并且在几年后对我来说效果很好。@iGranDav你知道你没有遵循HIG,对吧?@iGranDav正如我提到的,请查看Contacts应用程序,或者任何具有tableview的Apple应用程序,并在返回到包含tableview的视图后查看单元格如何取消选择自身。如果在DidSelectRowatineXpath中取消选择,则不会发生无缝转换。Cell1、2和3
initWithStyle
方法的代码不完整,可以扩展吗?@a-Live我添加了有关如何设置单元格的更多信息。在LayoutSubView中有一个从BaseCell和general setup继承的方法