2012-01-11 106 views
4

我的应用程序是飞行员的日志,我想让用户选择将应用程序放在他们选择的时区。航空公司飞行员可能飞过世界各地,但必须在输入航班信息时参考他们的本国时区。我想提供一个UI,允许他们选择一个时区选项,如“本地”(设备本地,取决于它们的位置),“UTC”,然后是硬“自定义”选项。如何创建iOS时区选取器?

我正在使用MonoTouch.Dialog,它允许您连接一个集合,但问题是在iOS时区列表相当长。我使用System.TimeZoneInfo命名空间来检索时区列表,就像在Windows中一样。但是,iOS使用诸如“美国/纽约,美国/ XYZ等”的演示文稿。因此,为了保持这个列表的可管理性,我需要通过分割/来分解这个问题,所以我可以首先提供一个国家列表,用户将点击该列表,然后第二个列表将出现在UITableView中,这是区域如“纽约”。然后,我将捕获时区并使用System.TimeZoneInfo方法将UTC从UTC转换为自定义时区。

我的问题是如何,特别是在MonoTouch.Dialog,我可以有一个集合,然后是一个子集合。即具有披露指标的国家UITableView,可将您带到该国的地区?

在这个相同的说明中,是否有其他人在iOS(Xcode或MonoTouch)中实现了“时区”选择器/选择器?

谢谢你的想法和帮助解决这个问题。

回答

5

下面将得到你所寻找的用户界面:

var groups = from tz in TimeZoneInfo.GetSystemTimeZones() 
    let name = tz.ToString() 
    let idx = name.IndexOf ('/') 
    where idx != -1 
    let first = name.Substring (0, idx) 
    group tz by first into g 
    select new { Region = g.Key, Zones=g }; 

var root = new RootElement ("TimeZones"){ 
    new Section ("Regions"){ 
     from r in groups 
      select (Element) new RootElement (r.Region.ToString()){ 
       new Section() { 
        from z in r.Zones 
         select (Element) new StringElement (z.ToString()) 
       } 
      } 
    } 
}; 
dvc = new DialogViewController (root); 

它生产这个UI:

Main UI http://tirania.org/s/c2219510.png

和嵌套内容是这样的:

Nested http://tirania.org/s/bb0d68da.png

+0

杰出的米格尔 - 谢谢你!奇怪iOS如何处理时区与Windows! :) – Neal 2012-01-12 13:25:42

1

在这个相同的说明中,是否有其他人在iOS(Xcode或MonoTouch)中实现了“时区”选择器/选取器?

我还没有看到一个在做恰好是这个。然而这article告诉你如何使用UIPickerView来实现你自己的选择器(靠近你想要的)。把它转换成C#应该不会太难。

一旦你有自己的UITimeZonePicker那么它应该很容易为MonoTouch.Dialog创建一个TimeZoneElement(主要是复制/粘贴DateElement)。

+0

ActionSheetPicker有一个ActionShe开箱即用的基于UIPickerView的解决方案的etLocalePicker子类。值得一看:https://github.com/skywinder/ActionSheetPicker-3.0 – 2015-11-27 16:31:01