Кнопочные вопросы в MonoTouch - PullRequest
0 голосов
/ 18 декабря 2011

Я работаю с MonoTouch, и у меня есть три вопроса о кнопках, с которыми, я надеюсь, кто-то может мне помочь.

  1. Я пытаюсь изменить кнопку «Назад» в строке заголовка. Как мне это сделать? Я видел ветку, размещенную здесь: Как изменить текст на кнопке возврата . Однако это не работает. Я понимаю, что у меня нет доступа к свойству контроллера. В настоящее время я получаю исключение NullReferenceException при попытке установить текст кнопки в методе ViewDidLoad. В настоящее время я пытаюсь установить текст следующим образом:

    this.NavigationItem.BackBarButtonItem.Title = "Back";

    У меня есть подозрение, что я не обращаюсь к корневому контроллеру, но я не уверен, как это сделать.

  2. Для кнопки «назад» на отдельной странице я хочу выполнить пользовательское действие. Я хочу, чтобы это вернулось, как сейчас. Но прежде чем это произойдет, я хочу выполнить некоторый пользовательский код. Как мне это сделать?

  3. Мне нужно создать что-то похожее на гиперссылку внутри абзаца текста. Как мне это сделать?

MonoTouch кажется крутым. Тем не менее, кривая обучения немного круче, чем я ожидал. Спасибо!

Ответы [ 3 ]

2 голосов
/ 18 декабря 2011

Для вашего первого вопроса ответ *1001* (на поставленный вами вопрос), специфичный для MonoTouch, работает отлично.

    this.NavigationItem.BackBarButtonItem = new UIBarButtonItem ("MyBack", UIBarButtonItemStyle.Plain, null);

Убедитесь, что все ответы,Этот код необходимо вызывать в pushing контроллере, а не в push .

UPDATE

Для вашего контроллераВо втором вопросе вы, вероятно, заметили несколько перегрузок, которые занимают Selector или delegate.Однако они не будут работать для кнопки Back .

Один из способов обойти это ограничение iOS - переопределить ViewDidAppear или ViewDidDisappear для получения аналогичного уведомления.

0 голосов
/ 07 апреля 2013

Я создал метод расширения, который позволяет изменять текст кнопки «Назад» и, при необходимости, обрабатывать действие TouchUp с помощью собственного кода. Он также сохраняет тот же вид границы, что и кнопка «Назад» по умолчанию.

public static class MyExtensions
{
    public static void SetCustomBackButton(this UIViewController uiViewController, string buttonText, Action onClick)
    {
        uiViewController.NavigationItem.HidesBackButton = true;
        var dummyButton = UIButton.FromType (UIButtonType.Custom);
        var backButton = (UIButton)MonoTouch.ObjCRuntime.Runtime.GetNSObject (
            MonoTouch.ObjCRuntime.Messaging.IntPtr_objc_msgSend_int (
            dummyButton.ClassHandle, MonoTouch.ObjCRuntime.Selector.GetHandle ("buttonWithType:"), 101));

        backButton.SetTitle (buttonText, UIControlState.Normal);

        backButton.TouchUpInside += delegate {
            if (onClick != null)
                onClick ();
            else
                uiViewController.NavigationController.PopViewControllerAnimated (true);
        };

        uiViewController.NavigationItem.LeftBarButtonItem = new UIBarButtonItem (backButton);
    }
}
0 голосов
/ 27 декабря 2012

Я решил ваш третий вопрос, создав пользовательскую кнопку в de viewbuilder.Установка типа на пользовательский удаляет стандартные границы и делает его похожим на строку текста.Просто измените его размер и стиль, чтобы он выглядел как гиперссылка.Я оставил пустое место в своем тексте и поместил свою пользовательскую кнопку в это место.

...