簡體   English   中英

當Xamarin.iOS中的View退出時,自定義TableViewCell將重新加載

[英]Custom TableViewCell reloads when out of View in Xamarin.iOS

我有一個帶有幾個自定義表格單元格的TableViewController。 我只是在玩它,我做了一些滾動。 當我在View外部滾動TableViewCell時,我注意到占位符文本變暗了。 我認為是因為TableViewCell已重新加載,並且彼此之間現在有2個占位符。 我還有一個帶有Switch的自定義表格單元。 當該單元格不在視圖中並返回時,它將取回原始值(當我將開關“關閉”並將其滾動到視圖之外時,它又返回為“開”)。

有人遇到過這個問題嗎? 為什么TableViewCells再次出現在視圖中時會重新加載?

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;
        }
    }

如果有人遇到相同的問題,則必須檢查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
}

沒有看到您的代碼就無法確定,但是UITableViewCell的默認行為(如果您遵循Apple和Xamarin提供的示例)是重用單元格,而不是每次都重新創建它們。 這意味着當一個單元滾動到屏幕之外時,它將被緩存,然后在需要新單元時將被重用。 您不能假定所提供的新單元格是“空白”的-您需要自己重新初始化。

如果您有多種類型的單元格,則應使用唯一的CellIdentitifier鍵進行區分。 這告訴緩存機制需要檢索哪種類型的單元。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM