2016-03-19 8 views
0

Experten verwenden,Xamarin.iOS - Speichert Status in UITableView Geprüft NSUserDefaults

Bitte siehe unten, wie ich einen Tisch und will den geprüfte Status der Tabelle innerhalb NSUserDefaults in Xamarin.iOS speichern. Wie würden Sie den überprüften Status in NSUserDefaults speichern (data.Selected = true)? Idealerweise möchte ich nach jeder überprüften Zelle diesen Wert in NSUserDefaults speichern. Wenn die Benutzer die App beenden, werden die Werte geladen, die sie vor dem Beenden der App ausgewählt haben. Jede Hilfe würde sehr geschätzt werden!

Ich habe folgenden Table Klasse:

namespace Project 
{ 
public class TableSource : UITableViewSource 
{ 
public readonly static string cellIdentifier = "cellID"; 
readonly Model _model; 

    public TableSource(Model source) 
    { 
     _model = source; 
    } 

    public override nint NumberOfSections(UITableView tableView) 
    { 
     return 1; 
    } 

    public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) 
    { 
     var value = _model[indexPath.Row]; 
     var cell = tableView.DequeueReusableCell (cellIdentifier) ?? new UITableViewCell (UITableViewCellStyle.Default, cellIdentifier) ; 
     cell.TextLabel.Text = value.Name; 
     cell.TextLabel.Font = UIFont.FromName ("Arial", 15f); 
     cell.Accessory = value.Selected ? UITableViewCellAccessory.Checkmark : UITableViewCellAccessory.None; 
     return cell; 
    } 

    public override nint RowsInSection(UITableView tableview, nint section) 
    { 
     return _model.Count; 
    } 

    public override void RowSelected(UITableView tableView,NSIndexPath indexPath) 
    { 
     var cell = tableView.CellAt(indexPath); 
     var data = _model[indexPath.Row]; 

     if (data.Selected) 
      data.Selected = false; 
      cell.Accessory = UITableViewCellAccessory.None; 
      Toast.MakeText(data.Name.ToString() + " Not Checked", Toast.LENGTH_LONG).SetGravity(ToastGravity.Center).Show(); 
     } 

     else 
     { 
      data.Selected = true; 
      cell.Accessory = UITableViewCellAccessory.Checkmark; 
      Toast.MakeText(data.Name.ToString() + " Checked", Toast.LENGTH_LONG).SetGravity(ToastGravity.Center).Show() 

     } 

     cell.Selected = false; 
     tableView.ReloadData(); 
    } 

} 
} 
+1

Und die Frage ist? – jbm

+0

Sie geben an, was Sie tun möchten, und Sie haben einen Code geschrieben, aber was ist das Problem? Was ist die eigentliche Frage? Bitte sehen Sie [ask] und [mcve] –

+0

Tut mir leid, ich habe meine Antwort oben bearbeitet, um die Frage zu stellen. – pkozlowski

Antwort

1

Speicher/ein boolean Abrufen von/NSUserDefaults ist ziemlich einfach:

// Store 
bool value = data.Selected; 
string key = string.Format("TableName{0}",indexPath.Row); // Some unique name 
NSUserDefaults.StandardUserDefaults.SetBool (value, key); 
// Fetch 
bool checked = NSUserDefaults.StandardUserDefaults.BoolForKey (key); 

jedoch mit NSUserDefaults hierfür ein bisschen hart zu sein scheint. Warum sollten Sie nicht die Auswahl des Benutzers in eine JSON-Datei im Cache-Ordner der App speichern?

+0

Vielen Dank! Ich habe den Ansatz verfolgt, die Auswahl über eine JSON-Datei zu verfolgen. Funktioniert perfekt. – pkozlowski

+0

@pkozlowski Gern geschehen. :) –

Verwandte Themen