如何在UITableView中删除和重新排序行?

Dri*_*uak 1 iphone uitableview xamarin.ios

我只能找到点点滴滴,没有全面的解释和帮助,特别是在MonoTouch中.

我有一个UITableView,我有我的DataSource对象,我有自定义的CellController.我在自定义单元格上有按钮,我想让用户删除该行或在列表中向上或向下移动它.

我只是无法弄清楚我应该如何管理修改数据源并让它重新绑定(我在思考.NET术语,我认为这是问题的一部分).

谢谢.

Chr*_*s S 7

以下是如何添加删除到表格,我不确定重新订购.在界面构建器中,将NavigationController添加到窗口,然后在其中添加TableViewController并在属性窗口中将其设置为MyTableViewController.

我想我从教程中得到了这个,那里有很多演示.如果你找不到一个例子,那就值得浏览Miguel De Icaza的Github样本了.

Alex York的帖子也可能有帮助,从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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)