iOS Widget扩展初始UIViewController

时间:2016-10-28 18:27:08

标签: ios xamarin

我在我的iOS应用程序中添加了“今天”扩展小部件,这是我用Xamarin制作的。我正在讲述这个演练:

https://developer.xamarin.com/guides/ios/platform_features/introduction_to_extensions/

小部件出现在模拟器的“通知”部分中,但我无法在其中显示任何内容。它甚至不会创建我创建的UIViewController类并将其设置为初始控制器(我知道因为它永远不会在构造函数中遇到我的断点)。我将其设置为具有此密钥的主要类,如演练中所述:

enter image description here

知道为什么吗?我在添加扩展程序后首次启动应用程序时也收到此消息:

appname may slow down your phone the developer of this app needs to update it to improve its compatibility

我使用Xamarin制作了一个示例项目,当部署在模拟器上时,小部件确实出现在这个项目中,而不是我想要在CodeViewController类中添加的内容:

https://drive.google.com/file/d/0B8xKHTqtwfKtY0xZN0xaejhlZmM/view?usp=sharing

1 个答案:

答案 0 :(得分:1)

为了节省你2天我花在这上面就是解决方案。

  1. 不要在模拟器上运行它。它不起作用(至少在我的情况下)。
  2. 不要试图在VS中遇到断点。在测试扩展程序时,您的应用程序处于后台模式。 VS不会让你在调试器中停止。要证明您运行任何应用程序,请按home并尝试在VS中设置断点。 VS将挂起,直到您将应用程序带到前台。
  3. 不要在DidLoad中使用View.Frame。框架的大小是整个屏幕尺寸,因此当您将标签置于中心时,您将看不到它。像这样使用WillAppear

    public override void ViewWillAppear(bool animated)
    {
        base.ViewWillAppear(animated);
    
        if (TodayMessage == null)
        {
            // Add label to view
            TodayMessage = new UILabel(new CGRect(0, 0, View.Frame.Width, View.Frame.Height))
            {
                TextAlignment = UITextAlignment.Center,
                BackgroundColor = UIColor.LightGray,
                TextColor = UIColor.Black
            };
    
            // Calculate the values
            var dayOfYear = DateTime.Now.DayOfYear;
            var leapYearExtra = DateTime.IsLeapYear(DateTime.Now.Year) ? 1 : 0;
            var daysRemaining = 365 + leapYearExtra - dayOfYear;
    
            // Display the message
            if (daysRemaining == 1)
            {
                TodayMessage.Text = String.Format("Today is day {0}. There is one day remaining in the year.", dayOfYear);
            }
            else
            {
                TodayMessage.Text = String.Format("Today is day {0}. There are {1} days remaining in the year.", dayOfYear, daysRemaining);
            }
    
            View.AddSubview(TodayMessage);
        }
    }
    
  4. enter image description here