UIBarButtonItem的Clicked事件似乎在MonoTouch中不起作用

时间:2012-08-26 19:18:22

标签: ios xamarin.ios uibarbuttonitem

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

我有两个屏幕,我介于两者之间。我们将它们称为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中的后退按钮时,“clicked”一词从未出现在控制台中。我也试过通过调用

隐藏默认值
this.NavigationItem.SetHidesBackButton(true, false);

在创建按钮之前,但它不会影响任何内容。

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:1)

有时,默认.ctor无法正常运行。 Iow它调用init选择器,但总是不提供完全初始化的实例(大多数情况下会引发ObjectiveC异常)。

确保尝试使用以下代码:

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

如果有效,请填写错误报告给http://bugzilla.xamarin.com/并添加一个回复此问题的链接。

答案 1 :(得分:1)

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

然而,这里的另一篇文章说它可以在推送控制器中工作,虽然它似乎对我不起作用:Button Questions in 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;
}