【问题标题】:Custom TableViewCell reloads when out of View in Xamarin.iOS自定义 TableViewCell 在 Xamarin.iOS 中的视图之外重新加载
【发布时间】:2014-05-05 00:04:33
【问题描述】:

我有一个带有几个自定义表格单元的 TableViewController。我只是在玩它,我做了一些滚动。我注意到当我在视图之外滚动 TableViewCell 时,它重新出现占位符文本变暗了一些。我认为这是因为 TableViewCell 被重新加载,现在有 2 个占位符在彼此之上。我还有一个带有开关的自定义表格单元格。当该单元格离开视图并重新进入时,它会取回原始值(当我将开关“关闭”并将其滚动出视图时,它会返回为“打开”)。

以前有人遇到过这个问题吗?为什么 TableViewCell 再次出现在 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;
        }
    }

【问题讨论】:

    标签: c# ios uitableview xamarin reload


    【解决方案1】:

    如果有人遇到同样的问题,我必须检查 TableCell 元素是否已经有一个属性。检查我使用标签的元素。

    这是我用来检查 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
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我用我正在使用的 GetCell 方法编辑了我的问题。
      • DequeueReusableCell() 将(可能)返回一个已经初始化的单元格。您需要确保它已正确初始化 - 即将字段重置为其默认状态等
      • 我只是 Xamarin 和 C# 的初学者,你能说得具体点吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      相关资源
      最近更新 更多