我正在尝试创建一个自定义后退按钮,除了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);
在创建按钮之前,但它不会影响任何内容。
任何建议都将不胜感激!
答案 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;
}