自定义TableViewCell在Xamarin.iOS中退出View时重新加载

时间:2014-03-26 14:06:47

标签: c# ios uitableview xamarin reload

我有一个带有几个自定义表格单元格的TableViewController。我只是玩它而且我做了一些滚动。当我在View外滚动一个TableViewCell时,我注意到它再次出现占位符文本有点暗。我认为这是因为TableViewCell重新加载,现在有2个占位符在彼此之上。我还有一个带Switch的自定义表格单元格。当该单元格不在视图中并重新进入时,它会收回原始值(当我将开关“关闭”并将其滚出视图时,它会返回' on& #39;)

以前有人遇到过这个问题吗?为什么TableViewCells再次出现在View中时会重新加载?

PS。我通过反序列化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;
        }
    }

2 个答案:

答案 0 :(得分:1)

如果有人遇到同样的问题,我必须检查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
}

答案 1 :(得分:0)

如果没有看到您的代码,就无法确定,但UITableViewCell的默认行为(如果您按照Apple和Xamarin提供的示例)是重复使用单元格而不是每次都重新创建它们。这意味着当一个单元格滚动离开屏幕时,它会被缓存,然后在需要新单元格时重复使用。您不能假设您提供的新单元格是"空白" - 你需要自己重新初始化它。

如果您有多种类型的单元格,则应使用唯一的CellIdentitifier键区分。这就是告诉缓存机制需要检索哪种类型的单元的原因。