【问题标题】:DialogViewController not firing ViewDidDisappearDialogViewController 不触发 ViewDidDisappear
【发布时间】:2012-12-08 15:49:49
【问题描述】:

我的层次结构如下:

NavigationController
  • 先推ViewController - 转到下一个视图时ViewDidDisappear 正确触发

  • 推送有列表的DialogViewController - 转到下一个时触发ViewDidDisappear

  • 每个列表都会打开一个新的DialogViewController - ViewDidDisappear 从不文件

  • 这个按钮上有一些按钮可以打开另一个DialogViewController - VidDidDisappear 永远不会触发

代码:

 public partial class CustomDialogController : DialogViewController {

    public CustomDialogController() : base (UITableViewStyle.Grouped, null, true) {
    }

    public override void ViewDidDisappear (bool animated)
    {
        base.ViewDidDisappear (animated);
        Console.WriteLine("Gone baby 2");
        // Never Fires
    }
  }

public partial class WorkoutsView : DialogViewController
{

    public override void ViewDidDisappear (bool animated)
    {
        base.ViewDidDisappear (animated);
        Console.WriteLine("Gone baby");
        // Here is where you can add your custom code for when the DialogViewController disappears
    }


    public WorkoutsView (MetaFitness.BL.MetaFitnessManager manager) : base (UITableViewStyle.Grouped, null, true)
    {
        this.Title ="Title";
        WorkoutViewModel WorkoutDetail = new WorkoutViewModel();
        //var bc = new BindingContext (this, WorkoutDetail, "Details");
        //detailView = new DialogViewController(bc.Root,true);
        List<Workout> workouts = manager.GetWorkouts ();

        var abc = new CustomDialogController();
        abc.Root = new RootElement("WorkoutsView");
        Root = abc.Root;
        Section section = new Section ("Workouts");
        foreach (var wo in workouts) {
            string name = string.Empty;

            CustomDialogController WorkoutController = new CustomDialogController();
            WorkoutController.Root = new RootElement(wo.Name);
            RootElement wSection = WorkoutController.Root;

            var s2 = new Section();
            var mvm2 = new MeasurementViewModel();
                            // the code for this is similar to CustomDialogController - never fires
            s2.Add(new MeasurementViewController(mvm2).Root);
            wSection.Add (s2);


            section.Add(wSection);  

        }
        Root.Add(section);
    }
}

【问题讨论】:

    标签: xamarin.ios monotouch.dialog


    【解决方案1】:

    这不是UINavigationControllerDialogViewController 的用法。 牢记UIViewController 的基本概念:一个控制器处理一屏内容(在iPhone 上)。这意味着,您应该将控制器推送到UIViewController's 堆栈上。这些控制器中的每一个都可以是DialogViewControllers。 这么说你已经可以看到在WorkoutsView 的一部分中添加MeasurementViewModel 的视图(根)是对上述概念的突破,因此,你违反了Apple 的设计规则和结果:你的View*() 方法不会被调用。

    相反:在您的元素上添加一个回调,其中一个可以将新控制器推送到导航控制器的堆栈中。

    您应该能够在 MT.Dialog 的 Github 页面上找到所有必要的文档:https://github.com/migueldeicaza/MonoTouch.Dialog 或在 Xamarin 博客中:http://blog.xamarin.com/2012/02/10/easily-create-ios-user-interfaces-with-monotouch-dialog/

    【讨论】:

    • 谢谢,这让我明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多