1

独自の DialogViewController クラスを作成しました。ダイアログには 2 つのレベルがあります。ユーザーが編集ボタンをクリックして、2 番目のレベルの要素を削除できるようにしたいと考えています。

いくつかのコードで説明してみましょう。

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);
        }
    }
}

ユーザーが編集セルをクリックすると、テーブルが編集モードに設定されます。

もちろん、削除アイコンをクリックしても何も起こりません。編集モードまたはスワイプを有効にして、第 2 レベル以降のルート要素に削除ボタンを表示するにはどうすればよいですか?

ダイアログ ビュー コントローラーの最初の画面で編集モードを有効にする方法を説明する次の投稿を読みました。編集モード-td4658436.html

これは第 1 レベルで機能しますが、第 2 レベル (第 2 レベル要素 1) で同じ方法でソースをサブクラス化することも可能ですか?

4

1 に答える 1

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);
}

これらの変数を使用して、要素を削除する必要があるかどうかを操作できます。

于 2013-10-29T15:47:55.267 に答える