2014-03-26 63 views
0

視圖外我有一個TableViewController與幾個自定義表格單元格。我只是在玩弄它,我做了一些滾動。我注意到當我在視圖外滾動一個TableViewCell時,它重新顯示佔位符文本有點暗。我認爲這是因爲TableViewCell被重新加載,現在有2個佔位符在彼此之上。我也有一個開關的自定義表格單元格。當該單元格離開視圖並返回時,它會取回原始值(當我將開關關閉並將其從視圖中移出時,它會回到'開')。自定義TableViewCell重新加載Xamarin.iOS

之前有人有過這個問題嗎?爲什麼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; 
     } 
    } 

回答

1

如果有人有同樣的問題,我不得不檢查TableCell元素是否已經有一個屬性。檢查我使用標籤的元素。

這是我用來檢查文本字段已經被設置或不代碼:

var setTextField = cell.ViewWithTag (99) as UITextField; 

if (setTextField == null) { 
    TextField = new UITextField(); 
    TextField.Placeholder = element [indexPath.Row].Placeholder; 

    cell.AddSubview (TextField); 
} else { 
    //Nothing 
} 
0

沒有看到你的代碼,這是不可能肯定地說,但UITableViewCell中的(如果你遵循蘋果和Xamarin提供的例子)是重用細胞的默認行爲而不是每次重新創建它們。這意味着當一個單元格從屏幕上滾動時,它被緩存,然後在需要新的單元格時被重用。你不能假設你提供的新單元是「空白」的 - 你需要自己重新初始化它。

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

+0

我編輯我的問題與GetCell方法我使用。 –

+0

DequeueReusableCell()將(可能)返回已經初始化的單元格。你需要確保它已被正確初始化 - 例如,將字段重置爲默認狀態等。 – Jason

+0

我只是Xamarin和C#的初學者,你能更具體嗎? –