2013-10-26 4 views
1

Я создал свой собственный класс DialogViewController. Диалог имеет два уровня. Я хочу, чтобы пользователь мог нажать кнопку редактирования, чтобы он мог удалить элементы на втором уровне.CommitEditingStyle of Monotouch.Dialog RootElement

Позвольте мне попытаться объяснить, с какой-то код:

public class TestMenu : DialogViewController 
{ 
    public TestMenu() : base (new RootElement("Menu"), true) 
    { 
     Section section = new Section(); 
     this.Root.Add (section); 
     RootElement firstRoot = new RootElement ("First level 1"); 
     section.Add (firstRoot); 
     RootElement secondRoot = new RootElement ("First level 2"); 
     section.Add (secondRoot); 

     // first rootelement 
     Section firstSection = new Section(); 
     firstRoot.Add (firstSection); 
     StringElement firstElement = new StringElement ("Second level element 1"); 
     firstSection.Add (firstElement); 

     // Button to set edit mode 
     Section buttonSection = new Section(); 
     firstRoot.Add (buttonSection); 
     StringElement buttonElement = new StringElement ("Edit"); 
     buttonElement.Tapped += delegate 
     { 
      // This works to get it in editing mode 
      firstRoot.TableView.SetEditing(true, true); 

      // This statement will not set it to editing mode 
      //this.SetEditing(true, true); 
     }; 
     buttonSection.Add (buttonElement); 

     // second rootelement 
     Section secondSection = new Section(); 
     secondRoot.Add (secondSection); 
     StringElement secondElement = new StringElement ("Second level element 2"); 
     secondSection.Add (secondElement); 
    } 

    public override Source CreateSizingSource (bool unevenRows) 
    { 
     return new TestSource(this); 
    } 

    class TestSource : DialogViewController.SizingSource 
    { 

     public TestSource(DialogViewController container) 
      : base (container) 
     {} 

     public override bool CanEditRow (UITableView tableView, NSIndexPath indexPath) 
     { 
      return true; 
     } 

     public override void CommitEditingStyle (UITableView tableView, UITableViewCellEditingStyle editingStyle, NSIndexPath indexPath) 
     { 
      // This is only fired when something is deleted in the first level 
      base.CommitEditingStyle (tableView, editingStyle, indexPath); 
     } 
    } 
} 

Когда пользователь щелкает на ячейке редактирования таблицы находится в режиме редактирования.

Нажатие на значки удаления, конечно, ничего не делает. Как включить режим редактирования или прокрутку, чтобы показать кнопку удаления на корневых элементах второго уровня и далее?

Я прочитал следующий пост, который объясняет, как включить режим редактирования в диалоге контроллера вид первого экрана: http://monotouch.2284126.n4.nabble.com/Monotouch-Dialog-table-rows-not-selectable-in-edit-mode-td4658436.html

Это работает на первом уровне, но также возможно sublass источника в том же путь на втором уровне (элемент 1 второго уровня)?

+0

Можете ли вы показать свой код для своего источника, где вы разрешаете редактирование? – therealjohn

+0

Я обновил код, чтобы включить элемент Source. – Nessinot

ответ

0

Вы можете настроить метод CommitEditingStyle, чтобы делать все, что хотите, а не ссылаться на базовую реализацию, что и показывает ваш код.

Например:

public override void CommitEditingStyle(UITableView tableView, UITableViewCellEditingStyle editingStyle, NSIndexPath indexPath) 
{ 
    var section = Container.Root[indexPath.Section]; 
    var element = section[indexPath.Row]; 
    section.Remove(element); 
    Container.Root.Reload(section, UITableViewRowAnimation.None); 
} 

Вы можете использовать эти переменные, чтобы управлять, если вы должны удалить элемент или нет.

+0

Спасибо, что нашли время ответить на мой вопрос. К сожалению, ваше предложение не работает. Метод CommitEditingStyle не вызывается, когда я нахожусь на втором уровне. Я подозреваю, что Source установлен на TableView на первом уровне. На втором уровне есть новый TableView, к которому я как-то должен подключиться к Источнику. Я просто не знаю, как это сделать. – Nessinot

+0

Вам нужно иметь несколько RootElements? Почему бы просто не использовать разделы? – therealjohn

+0

Из-за отпуска я не мог ответить раньше. Мне нужна эта настройка, потому что это иерархия. Я мог бы попытаться создать новый dvc после того, как будет затронут первый уровень 1. – Nessinot

Смежные вопросы