2010-01-30 6 views
1

Je suis seulement capable de trouver des bribes et des morceaux, et aucune explication générale et d'aide, en particulier dans MonoTouch pour cela.Comment supprimer et réorganiser des lignes dans UITableView?

J'ai un UITableView, j'ai mon objet DataSource, et j'ai mon CellController personnalisé. J'ai des boutons sur les cellules personnalisées que je veux permettre à l'utilisateur de supprimer la ligne ou de la déplacer vers le haut ou vers le bas dans la liste présentée. Je n'arrive pas à comprendre comment je suis supposé gérer la modification de la source de données et l'amener à rebondir (je pense en termes .NET, ce qui, je pense, fait partie du problème).

merci.

Répondre

2

Je ne suis pas familier avec monotouch, mais dans l'API Objective-C, vous devez appeler la méthode reload de la table si vous avez mis à jour une source de données.

7

Voici comment vous pouvez ajouter des suppressions à la table, je ne suis pas sûr de réorganiser. Dans le Générateur d'interface, ajoutez NavigationController à votre fenêtre, puis ajoutez un TableViewController à l'intérieur et définissez sa classe dans la fenêtre des propriétés sur MyTableViewController.

Je pense que je l'ai compris dans les tutoriels, il y a beaucoup de démos. Si vous ne pouvez pas trouver un exemple, vous êtes après il vaut la peine de parcourir Miguel De Icaza's Github samples.

poste de Alex York pourrait aussi aider, Deleting cells from a UITableView

[MonoTouch.Foundation.Register("MyTableViewController")] 
public class MyTableViewController : UITableViewController 
{ 
    public List<string> Items { get;set; } 

    private UIBarButtonItem _buttonEdit; 
    private UIBarButtonItem _buttonDone; 

    public MyTableViewController(IntPtr ptr) : base(ptr) 
    { 
     _buttonEdit = new UIBarButtonItem(UIBarButtonSystemItem.Edit); 
     _buttonDone = new UIBarButtonItem(UIBarButtonSystemItem.Done); 
     _buttonEdit.Clicked += Handle_buttonEditClicked; 
     _buttonDone.Clicked += Handle_buttonDoneClicked; 

     NavigationItem.RightBarButtonItem = _buttonEdit; 
    } 

    void Handle_buttonDoneClicked (object sender, EventArgs e) 
    { 
     Editing = false; 
     NavigationItem.RightBarButtonItem = _buttonEdit; 
    } 

    void Handle_buttonEditClicked (object sender, EventArgs e) 
    { 
     Editing = true; 
     NavigationItem.RightBarButtonItem = _buttonDone; 
    } 

    private void BindData() 
    { 
     Title = "Testing tables"; 
     Items = new List<string>() { "hello","world","big","bad","world"}; 
    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad();  

     BindData(); 
     TableView.Delegate = new MyTableViewDelegate(this); 
     TableView.DataSource = new MyTableDataSource(this); 
    } 

    public class MyTableDataSource : UITableViewDataSource 
    { 
     private MyTableViewController _tableViewController; 

     public MyTableDataSource(MyTableViewController controller) 
     { 
      _tableViewController = controller; 
     } 

     public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath) 
     { 
      string cellid = "cellid"; 
      UITableViewCell cell = tableView.DequeueReusableCell(cellid); 

      if (cell == null) 
      { 
       cell = new UITableViewCell(UITableViewCellStyle.Default, cellid); 
       cell.Accessory = UITableViewCellAccessory.DisclosureIndicator; 
      } 

      cell.TextLabel.Text = _tableViewController.Items[indexPath.Row]; 

      return cell; 
     } 

     public override void CommitEditingStyle (UITableView tableView, UITableViewCellEditingStyle editingStyle, NSIndexPath indexPath) 
     { 
      if (editingStyle == UITableViewCellEditingStyle.Delete) 
      { 
       _tableViewController.Items.RemoveAt(indexPath.Row); 
       tableView.DeleteRows(new [] { indexPath }, UITableViewRowAnimation.Fade); 
      } 
     } 


     public override int RowsInSection (UITableView tableview, int section) 
     { 
      return _tableViewController.Items.Count; 
     } 

     public override string TitleForHeader (UITableView tableView, int section) 
     { 
      return "title"; 
     } 
    } 


    public class MyTableViewDelegate : UITableViewDelegate 
    { 
     private DetailsViewController _detailsViewController; 
     private MyTableViewController _tableViewController; 

     public MyTableViewDelegate(MyTableViewController controller) 
     { 
      _tableViewController = controller; 
     } 

     public override void RowSelected (UITableView tableView, NSIndexPath indexPath) 
     { 
      if (_detailsViewController == null) 
       _detailsViewController = new DetailsViewController(); 

      _detailsViewController.CurrentItem = _tableViewController.Items[indexPath.Row]; 
      _tableViewController.NavigationController.PushViewController(_detailsViewController,true); 
     } 
    } 
}