在Xamarin.iOS中,自定义TableViewCell在离开视图时重新加载

本文关键字:新加载 加载 离开 iOS Xamarin TableViewCell 自定义 视图 | 更新日期: 2023-09-27 17:53:46

我有一个TableViewController与几个自定义表格单元格。我只是在玩它,我做了一些滚动。我注意到,当我滚动一个TableViewCell外的视图,它重新出现,占位符文本有点暗。我认为这是因为TableViewCell被重新加载,现在有两个占位符在彼此的顶部。我还得到了一个带有Switch的自定义表格单元格。当那个单元格退出视图并重新进入时,它会收回原始值(当我将开关'off'并将其滚动出视图时,它会以'on'返回)。

以前有人遇到过这个问题吗?为什么TableViewCells重新加载时,他们再次出现在视图?

p。我通过反序列化Json文件来创建TableViewCells,这是在ViewDidLoad()方法中完成的。

这是我的GetCell方法:
public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
    {
        if (element [indexPath.Row].Type == "textField") {
            NSString FieldID = new NSString ("EditField");
            UITableViewCell cell = tableView.DequeueReusableCell (FieldID);
            //Code to fill the textfield table cell
            return cell;
        } 
        if (element [indexPath.Row].Type == "switch") {
            NSString FieldID = new NSString ("SwitchField");
            UITableViewCell cell = tableView.DequeueReusableCell (FieldID);
            //Code to fill switch table cell
            return cell;
        }
    }

在Xamarin.iOS中,自定义TableViewCell在离开视图时重新加载

如果有人有同样的问题,我必须检查TableCell元素是否已经有属性。为了检查元素,我使用了Tags.

这是我用来检查TextField是否已经设置的代码:

var setTextField = cell.ViewWithTag (99) as UITextField;
if (setTextField == null) {
    TextField = new UITextField ();
    TextField.Placeholder = element [indexPath.Row].Placeholder;
    cell.AddSubview (TextField);
} else {
    //Nothing
}

没有看到你的代码是不可能确定的,但是UITableViewCell的默认行为(如果你遵循苹果和Xamarin提供的例子)是重用单元格,而不是每次都重新创建它们。这意味着当单元格滚动出屏幕时,它将被缓存,然后在需要新单元格时重用。您不能假设提供给您的新单元格是"blank" -您需要自己重新初始化它。

如果你有多种类型的单元格,你应该用唯一的celllidentifier键来区分它们。这告诉缓存机制需要检索哪种类型的单元格。