DateTimeElement (Monotouch.Dialog) 上缺少后退按钮

Posted

技术标签:

【中文标题】DateTimeElement (Monotouch.Dialog) 上缺少后退按钮【英文标题】:Missing Back-Button on DateTimeElement (Monotouch.Dialog) 【发布时间】:2014-02-26 13:07:32 【问题描述】:

我将这段简单的代码用于我的 UI:

challengeStartTime = new DateTimeElement("Start Time",DateTime.Now);

Root = new RootElement ("Add Event") 
    new Section ("")
        challengeStartTime
    
;

我使用这段代码一段时间,一切都按预期工作。现在我将应用程序迁移到 ios 7 并且出现了这种奇怪的行为: 1. 导航到 DateTimeElement 2. 导航回上一个屏幕(NavigationController-Bar 中有通常的后退按钮) 3. 再次导航到 DateTimeElement (例如,如果我输入了错误的时间) 4. NavigationController 中没有返回按钮。无法返回。

我再次验证了我的旧版本(Appstore,“win4youth”),它可以正常运行。

有什么想法会导致这个奇怪的问题吗?我已经下载了当前版本的https://github.com/migueldeicaza/MonoTouch.Dialog,编译并尝试了它,但行为相同。我正在为其他屏幕使用故事板,也许与此有关?

感谢您的帮助

【问题讨论】:

检查代码中的某个地方是否隐藏了导航控制器的后退按钮。 SetHidesBackButtonHidesBackButton 【参考方案1】:

感谢@Krumelur 指出正确的方向!

我的 DialogViewController 中有这段代码:

public override void ViewDidAppear (bool animated)

    //this "hack" is necessary because we use a DialogViewController together with a Storyboard and have no control over the constructor
    this.NavigationItem.HidesBackButton = false;

    base.ViewDidAppear (animated);

这似乎导致了问题。奇怪的是,在 iOS 7 之前它可以工作。经过一番研究,我发现了这个帖子:http://forums.xamarin.com/discussion/8291/navigationcontroller-missing-back-button-when-coming-from-the-third-level-to-the-second-level

这为我提供了解决方案:

public override void ViewWillAppear (bool animated)

    base.ViewWillAppear (animated);

    NavigationItem.SetHidesBackButton (false, false);


public override void ViewWillDisappear (bool animated)

    base.ViewWillDisappear (animated);

    NavigationItem.SetHidesBackButton (true, false);

它仍然是一个 hack,但至少是一个有效的 :-)

【讨论】:

以上是关于DateTimeElement (Monotouch.Dialog) 上缺少后退按钮的主要内容,如果未能解决你的问题,请参考以下文章