如何正确重用Objective c中的单元格?

时间:2017-08-16 18:01:48

标签: ios objective-c xcode uitableview reuseidentifier

我的UITableViewCell存在很大问题。我使用故事板,我有一个自定义单元格到我的UITableVIew。我为此添加了一个Identifier,我的类代码是:

static NSString *celldentifier = @"myCellId";

CustomCell *myCell = [tableView dequeueReusableCellWithIdentifier:celldentifier];

    if (celldentifier == nil) {
        celldentifier = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:celldentifier];
    }
...

编辑:

...
myCell.myButton.hidden = YES;
...

当我在单元格中加载其他信息并且我需要隐藏按钮时,我会进行重新加载表:

[self.myTable reloadData];

在我的viewController中,我重新加载这个tableView,显示或隐藏我的单元格中的一些组件,如UIButton。但是当我滚动时,这个按钮就会消失..

我的代码有什么问题?我怎么能解决这个问题?

4 个答案:

答案 0 :(得分:1)

问题是单元格正在重复使用 ..如果你有 if语句进行更改 ..请确保将其他内容放入其中你还原它

if(isReady){
    myCell.myButton.hidden = YES;
}
else {
    myCell.myButton.hidden = NO;
}

答案 1 :(得分:0)

myCell.myButton.hidden = YES;

cellForRowAtIndexPath方法中使用它是个坏主意。

您应该为单元格创建模型并保留单元格的所有属性。

if (myCell == nil) {
    myCell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:celldentifier];
    //I think it should be but don't shure
    //[tableView registerClass:<#(nullable Class)#> forCellReuseIdentifier:<#(nonnull NSString *)#>];
}

答案 2 :(得分:0)

static NSString *celldentifier = @"myCellId";
CustomCell *myCell = [tableView dequeueReusableCellWithIdentifier:celldentifier];
if (!myCell) {
    myCell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:celldentifier];
}

答案 3 :(得分:0)

我遇到了同样的问题,您应该在myCell.myButton.hidden = YES;

之前添加static NSString *simpleTableIdentifier = @"myCellId"; CustomCell * myCell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; if (myCell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; myCell = [nib objectAtIndex:0]; } myCell.myButton.hidden = NO; if(isReady){ myCell.myButton.hidden = YES; } 此代码

像这样:

res <- df
res$Stay_Duration <-
  as.difftime(c(as.integer(difftime( 
    strptime(tail(res$ENTRY_TM, -1), "%H:%M:%S"),
    strptime(head(res$EXIT_TM, -1), "%H:%M:%S"), 
    units = "secs"
  )) %% (24*3600), NA), units = "secs")

#      JRNY_ID_NUM     BIZ_DT ENTRY_TM  EXIT_TM Stay_Duration
# 160 115492027250 2017-01-01 06:45:55 06:54:50     2386 secs
# 73  115492027250 2017-01-01 07:34:36 07:43:21    16710 secs
# 51  115523231209 2017-01-01 12:21:51 13:17:38     1142 secs
# 145 115523231209 2017-01-01 13:36:40 13:46:19    57055 secs
# 111 115526742250 2017-01-02 05:37:14 05:43:02      698 secs
# 56  115526742250 2017-01-02 05:54:40 06:36:28    35572 secs
# 119 115509240124 2017-01-02 16:29:20 17:26:50      214 secs
# 157 115509240124 2017-01-02 17:30:24 17:36:37    42973 secs
# 168 115539253765 2017-01-03 05:32:50 05:40:51       96 secs
# 131 115539253765 2017-01-03 05:42:27 06:24:58    37889 secs
# 81  115570245886 2017-01-03 16:56:27 18:23:17    11948 secs
# 78  115567046025 2017-01-03 21:42:25 22:15:05    28061 secs
# 135 115562452408 2017-01-04 06:02:46 06:32:15      497 secs
# 35  115562452408 2017-01-04 06:40:32 08:17:58    32057 secs
# 165 115574565032 2017-01-04 17:12:15 18:14:35      110 secs
# 25  115574565032 2017-01-04 18:16:25 18:25:18       NA secs