1

我正在尝试创建一个自定义后退按钮,除了 Clicked 事件之外,一切似乎都有效。

我有 2 个屏幕要在它们之间移动。我们将它们称为 Screen1 和 Screen2。Screen1 中有一个按钮,单击该按钮可将我带到 Screen2。

以下代码是我尝试创建自定义背面的方式,该背面已放置在 Screen1 的 ViewDidLoad 和 ViewWillDisappear 中(以下是我在 ViewWillDisappear 中的内容)。两个函数中使用的代码是以下代码的最后两行。

protected override void ViewWillDisappear(bool animated) {
    base.ViewWillDisappear(animated);
    this.NavigationController.SetNavigationBarHidden(false, animated);
    UIBarButtonItem backBtn = new UIBarButtonItem("NewTitle", UIBarButtonItemStyle.Plain, delegate { Console.WriteLine("clicked"); });
    this.NavigationItem.BackBarButtonItem = backBtn;
}

运行时,当我单击 Screen2 中的后退按钮时,控制台中永远不会出现“单击”一词。我也尝试通过调用隐藏默认值

this.NavigationItem.SetHidesBackButton(true, false);

在创建按钮之前,但它没有影响任何东西。

任何建议将不胜感激!

4

2 回答 2

1

有时默认值.ctor不会像我们预期的那样工作。IOW 它调用init选择器,但并不总是提供完全初始化的实例(大多数时候会引发 ObjectiveC 异常)。

确保尝试使用以下代码:

UIBarButtonItem backBtn = new UIBarButtonItem ("NewTitle", UIBarButtonItemStyle.Plain, delegate {
   Console.WriteLine("clicked");
});
this.NavigationItem.BackBarButtonItem = backBtn;

如果可行,请向http://bugzilla.xamarin.com/填写错误报告,并添加回此问题的链接。

于 2012-08-26T23:03:20.097 回答
1

经过大量研究和反复试验,我发现了以下帖子:http ://adrianhosey.blogspot.com/2009/06/why-wont-my-backbarbuttonitem-use-its.html (注意有一些粗口在文中)。似乎将变量 BackBarButtonItem 设置为自定义按钮不起作用;您可以更改文本,但似乎就是这样。

然而,这里的另一篇文章说它可以在推送控制器中工作,尽管它似乎对我不起作用:MonoTouch 中的按钮问题

要解决此问题,以下代码对我有用:

public override void ViewDidLoad() {
    base.ViewDidLoad();
    this.NavigationItem.SetHidesBackButton(true, false);
    UIBarButtonItem backBtn = new UIBarButtonItem("Back", UIBarButtonItemStyle.Plain, delegate {
        Console.WriteLine("clicked");
        //one of the NavigationController pop functions to go back
    });
    this.NavigationItem.LeftBarButtonItem = backBtn;
}
于 2012-09-17T23:43:24.130 回答