我有一个带有几个自定义表格单元格的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;
}
}
答案 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键区分。这就是告诉缓存机制需要检索哪种类型的单元的原因。