MonoTouch中的按钮问题

时间:2011-12-18 15:00:43

标签: c# ios uinavigationcontroller xamarin.ios uibarbuttonitem

我正在使用MonoTouch,我提出了三个关于按钮的问题,我希望有人可以帮助我。

  1. 我正在尝试更改标题栏中的“后退”按钮。我该怎么做呢?我在这里发布了帖子:How to change text on a back button。但是,这不起作用。我得到了我没有访问控制器属性的氛围。目前,当我尝试在ViewDidLoad方法中设置按钮文本时,我收到NullReferenceException。目前,我正在尝试设置文本:

    this.NavigationItem.BackBarButtonItem.Title =“Back”;

    我怀疑我没有访问根控制器,但我不知道该怎么做。

  2. 对于单独页面上的“后退”按钮,我想执行自定义操作。我希望它像它一样回去。但在此之前,我想执行一些自定义代码。我该怎么做?

  3. 我需要在文本段落中创建看起来像超链接的东西。我该怎么做?

  4. MonoTouch看起来很酷。然而,学习曲线比我预期的要陡峭得多。谢谢!

3 个答案:

答案 0 :(得分:2)

对于您的第一个问题,特定于MonoTouch的answer(对您提供的问题)运作良好。

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

确保全部答案。此代码需要在推送控制器中调用,而不是推送的控制器。

<强>更新

对于您的第二个问题,您可能会注意到一些需要Selectordelegate的重载。但是他们won't work用于后退按钮。

解决此iOS限制的一种方法是覆盖ViewDidAppearViewDidDisappear以获得类似的通知。

答案 1 :(得分:0)

我通过在de viewbuilder中创建自定义按钮解决了第三个问题。将类型设置为自定义会删除标准边框并使其看起来像一行文本。只需更改其大小和样式,使其看起来更像一个超链接。我在文本中留下了一个空白区域,并将自定义按钮放在该空间中。

答案 2 :(得分:0)

我创建了一个扩展方法,允许您更改后退按钮文本,并可选择使用您自己的代码处理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);
    }
}