Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.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 UITableViewCells的可扩展内容“;“闪耀”;水槽_Ios_Uitableview_Swift - Fatal编程技术网

Ios UITableViewCells的可扩展内容“;“闪耀”;水槽

Ios UITableViewCells的可扩展内容“;“闪耀”;水槽,ios,uitableview,swift,Ios,Uitableview,Swift,我刚刚在swift中创建了一个UITableView,在单击单元格时使用可展开单元格。展开后,单元格显示一个UIDatePicker 扩展本身可以很好地工作,但是只有当单元格被扩展时才能看到的单元格内容会在单元格中发光。下面是我所说内容的屏幕截图: 单元格1已展开,而其他单元格未展开。如您所见,它们的可展开内容是可见的,而实际上不应该是可见的 以下是我使用的代码: func tableView(tableView: UITableView, cellForRowAtIndexPath inde

我刚刚在swift中创建了一个
UITableView
,在单击单元格时使用可展开单元格。展开后,单元格显示一个
UIDatePicker

扩展本身可以很好地工作,但是只有当单元格被扩展时才能看到的单元格内容会在单元格中发光。下面是我所说内容的屏幕截图:

单元格1已展开,而其他单元格未展开。如您所见,它们的可展开内容是可见的,而实际上不应该是可见的

以下是我使用的代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cellIdentifier = "Cell";

    var cell: NewExpenseTableCell;
    var array: NSArray = NSBundle.mainBundle().loadNibNamed("Cell", owner: self, options: nil);

    cell = array.objectAtIndex(0) as NewExpenseTableCell;
    cell.backgroundColor = UIColor.whiteColor();

    cell.descriptionLabel?.text = descriptionLabels[indexPath.item];

    return cell;
}

var selectedRowIndex = -1;

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    if selectedRowIndex == indexPath.row {
        selectedRowIndex = -1;
    } else {
        self.selectedRowIndex = indexPath.row;
    }
    newExpenseTable.beginUpdates();
    newExpenseTable.endUpdates();
}

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    if indexPath.row == selectedRowIndex {            
        return 206;
    }       
    return 55;
}

有谁能告诉我如何确保
UIDatePicker
仅在单元格展开时可见?

以下是我建议如何使单元格重用正常工作的方法

  • 打开新ExpenseTableCell的.xib文件。转到属性检查器,输入“NewExpenseTableCell”作为标识符

  • 在视图控制器的
    viewDidLoad
    方法中,按如下方式注册nib:

    self.tableView.registerNib(UINib(nibName: "NewExpenseTableCell", bundle: nil), forCellReuseIdentifier: "NewExpenseTableCell")
    
  • cellforrowatinexpath
    方法中,将您的前四行替换为:

    var cell = tableView.dequeueReusableCellWithIdentifier("NewExpenseTableCell") as NewExpenseTableCell
    

  • 这看起来像是一个单元重用问题。您是否有
    NewExpenseTableCell
    的子类?如果是,请显示其代码。如果不是,您在哪里为其
    UIDatePicker
    子视图设置
    hidden
    属性?不,我没有NewExpenseTableCell的子类,它只是扩展了UITableView单元格。我不会在任何地方设置隐藏属性。我应该在哪里设置它?有几种可能的方法。您可以为
    NewExpenseTableCell
    创建子类。然后在
    setSelected:animated
    方法中更改日期选择器上的
    hidden
    属性,并在
    prepareForReuse
    中将
    hidden
    设置为
    NO
    。它现在部分工作,但会产生某种闪烁。我现在还发现这个问题可能与重用有关。有没有一种正确的方法可以重用定制的UITableViewCells(从.xib文件加载的)?尝试使用
    DidSelectRowatingIndexPath:
    中的
    方法来代替
    BeginUpdate
    /
    EndUpdate
    ,这可能有助于闪烁。