【问题标题】:Button Questions in MonoTouchMonoTouch 中的按钮问题
【发布时间】:2011-12-18 15:00:43
【问题描述】:

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

  1. 我正在尝试更改标题栏中的“返回”按钮。我该怎么做呢?我在这里看到了帖子:How to change text on a back button。但是,这是行不通的。我得到了我没有访问控制器属性的感觉。目前,当我尝试在 ViewDidLoad 方法中设置按钮文本时收到 NullReferenceException。目前,我正在尝试像这样设置文本:

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

    我怀疑我没有访问根控制器,但我不确定如何执行此操作。

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

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

MonoTouch 看起来很酷。但是,学习曲线比我预期的要陡峭一些。谢谢!

【问题讨论】:

  • 请避免在使用 stackoverflow.com 时添加不相关的问题(例如后退按钮和超链接)。它们使您获得答案的可能性降低(除非有人对您的每个问题都有答案),这对您不利。这也降低了您的问题对其他人有用的可能性(因为问题和答案很难找到)。如有疑问,请参阅常见问题解答。

标签: c# ios uinavigationcontroller xamarin.ios uibarbuttonitem


【解决方案1】:

对于您的第一个问题,MonoTouch 特定的answer(针对您提供的问题)完美运行。

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

确保所有答案。此代码需要在 pushing 控制器中调用,而不是在被 pushed 的控制器中调用。

更新

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我后来发现这个解决方案并不总是有效。当我更改 UINavigationBar 的外观时,按钮会返回到正方形。
      猜你喜欢
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2012-09-19
      相关资源
      最近更新 更多