菜鸟教程小白 发表于 2022-12-13 07:12:11

ios - 自定义 UITableViewCell prepareForReuse 未按预期工作


                                            <p><p>我的 <code>prepareForReuse</code> 工作不正常。我有一个 <code>UITableView</code> 应该只有在表的第一部分的第一行中有一个 <code>login</code> <code>UIButton</code>。但是,当我在 <code>prepareForReuse</code> 中删除 <code>login</code> 按钮时,它会停留并进入下一批行。 (视频说明 -> <a href="http://pixori.al/8g3v" rel="noreferrer noopener nofollow">http://pixori.al/8g3v</a>)</p>

<p>这是我的自定义 <code>UITableViewCell</code>:</p>

<pre><code>#import &#34;MAGradeCell.h&#34;

@implementation MAGradeCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    self = ;
    if (self) {
      // Initialization code
    }
    return self; }

-(void)layoutSubviews{
    ; }

- (void)prepareForReuse {
    self.loginButton = nil;
    ;
    ;
    self.textLabel.text = nil;

    ; }

/*
- (void)setSelected:(BOOL)selected animated:(BOOL)animated{;    // Configure the view for the selected state}*/

@end
</code></pre>

<p>以及设置单元格的 ViewController 部分 (<code>cellForRowAtIndexPath</code>)。即我把 <code>QBFlatButton</code> 和所有东西放在哪里:</p>

<pre><code>- (MAGradeCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @&#34;CellIdentifier&#34;;
    //UITableViewCell *cell = ;
    MAGradeCell *cell = ;


//    // Redefine layout variables in method from `viewDidLoad`
    CGFloat inset = 20; // For padding


    if (! cell) {
      cell = [ initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier cellForRowAtIndexPath:indexPath];
    }


    // Sets up attributes of each cell
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.backgroundColor = ;
    cell.textLabel.textColor = ;
    cell.detailTextLabel.textColor = ;
    QBFlatButton* loginButton = nil;

    if (indexPath.section == 0) {
      if (indexPath.row == 0) {
            ;

                UIView *cellView = cell.contentView;
                loginButton = [ initWithFrame:CGRectMake((cellView.frame.size.width - (80 + inset)), 18, 80, (cellView.frame.size.height -(cellView.frame.size.height/2)))];
                ;
                loginButton.faceColor = ;
                loginButton.sideColor = ;

                loginButton.radius = 6.0;
                loginButton.margin = 4.0;
                loginButton.depth = 3.0;
                loginButton.alpha = 0.3;

                loginButton.titleLabel.font = ;
                forState:UIControlStateNormal];
                ;
                ;
      } else {
            cell.selectionStyle = UITableViewCellSelectionStyleBlue;
            MAGradeClient *grade = [ init];
            ;
      }
    } else if (indexPath.section == 1) {
      if (indexPath.row == 0) {
            ;
      }
      else {
            // Get hourly weather and configure using method
            MACondition *weather = .hourlyForecast;
            ;
      }
    }
    else if (indexPath.section == 2) {
      if (indexPath.row == 0) {
            ;
      }
      else if (indexPath.section == 2) {
            // Get daily weather and configure using method
            MACondition *weather = .dailyForecast;
            ;
      }
    }

    return cell;
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果你这样做:</p>

<pre><code>self.loginButton = nil;
</code></pre>

<p>然后尝试做:</p>

<pre><code>;
</code></pre>

<p>它不起作用,因为您已经取消了引用。</p>

<p>考虑为该单元格使用不同的单元格标识符,因为如果您要添加和删除按钮,它并不是真正的纯重用。还考虑隐藏/显示按钮。如果要删除它,请将代码更改为:</p>

<pre><code>- (void)prepareForReuse
{
    ;
    self.loginButton = nil;

    self.textLabel.text = nil;

    ;
}
</code></pre>

<p>看起来你从来没有设置过:</p>

<pre><code>cell.loginButton = loginButton;
</code></pre>

<p>所以单元格可能没有使用的引用...</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 自定义 UITableViewCell prepareForReuse 未按预期工作,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/22607293/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/22607293/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 自定义 UITableViewCell prepareForReuse 未按预期工作