Как удалить и изменить порядок строк в UITableView? - PullRequest
1 голос
/ 30 января 2010

Я могу только найти кусочки, без всяких объяснений и помощи, особенно в MonoTouch для этого.

У меня есть UITableView, у меня есть объект DataSource, и у меня есть свой собственный CellController. У меня есть кнопки в пользовательских ячейках, которые я хочу, чтобы пользователь мог удалить строку или переместить ее вверх или вниз в представленном списке.

Я просто не могу понять, как я должен управлять изменением источника данных и перепривязыванием его (я думаю в терминах .NET, который я считаю частью проблемы).

спасибо.

Ответы [ 2 ]

7 голосов
/ 06 февраля 2010

Вот как вы можете добавить удаление в таблицу, я не уверен насчет повторного заказа. В конструкторе интерфейса добавьте NavigationController в ваше окно, а затем добавьте TableViewController внутри него и установите его класс в окне свойств на MyTableViewController.

Думаю, я понял это из уроков, там много демо. Если вы не можете найти пример, который вам нужен, стоит посмотреть образцы Мигеля Де Иказы на Github .

Пост Алекса Йорка также может помочь, Удаление ячеек из 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);
        }
    }
}
2 голосов
/ 30 января 2010

Я не знаком с monotouch, но в Objective-C API вам нужно вызвать метод перезагрузки таблицы, если вы обновили источник данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...