Monotouch.Dialog — Как вывести вид из элемента

Кажется, это должно быть очень просто, но я что-то упускаю. У меня есть пользовательский элемент:

public class PostSummaryElement:StyledMultilineElement,IElementSizing

Когда нажимается аксессуар элемента, я хочу поместить представление в стек. т.е. что-то вроде этого:

this.AccessoryTapped += () => {
    Console.WriteLine ("Tapped");
    if (MyParent != null) {
    MyParent.PresentViewController(new MyDemoController("Details"),false,null);
            }
};

Где графический интерфейс MyDemoController создается с помощью monotouch.dialog.

Я просто пытаюсь разбить графический интерфейс на представления и элементы управления, где элемент управления может поместить представление в стек, чтобы что-то произошло, а затем пользователь переходит к предыдущему представлению, содержащему элемент управления.

Любая мысль? Спасибо.


person W. Christopher Moses    schedule 21.01.2013    source источник
comment
Какой у Вас вопрос? Вы говорите, что это должно быть легко, но вы что-то упускаете. Что происходит не так? Вы получаете ошибку. MyDemoController отсутствует?   -  person svn    schedule 22.01.2013


Ответы (1)


Я бы рекомендовал вам не жестко кодировать поведение в методе AccessoryTapped, потому что день, когда вы захотите использовать этот компонент в другом месте вашего проекта, очень близок. И, возможно, в ближайшем будущем вам понадобится какое-то другое поведение или, например, это будет другой проект вообще без MyDemoController.
Итак, я предлагаю вам создать следующее свойство:

public Action accessoryTapped;

в вашем элементе и его представлении, а затем измените свой AccessoryTapped следующим образом:

this.AccessoryTapped += () => {
    Console.WriteLine ("Tapped");
    if (accessoryTapped != null) {
        accessoryTapped();
    }
};

Итак, вам нужно создать объекты PostSummaryElement следующим образом:

var myElement = new PostSummaryElement() {
  accessoryTapped = someFunction,
}
...
void someFunction()
{
    NavigationController.PushViewController (new MyDemoController("Details"), true);
}
person olexa.le    schedule 22.01.2013