如何创建iOS时区选取器?

时间:2012-01-11 15:52:20

标签: xcode ios4 ios5 xamarin.ios timezone

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

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

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

在同样的说明中,还有其他人在iOS(Xcode或MonoTouch)中实现了“时区”选择器/选择器吗?

感谢您的想法并帮助解决此问题。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

  

在同样的说明中,还有其他人在iOS(Xcode或MonoTouch)中实现了“时区”选择器/选择器吗?

我还没有看到一个人完全这个。不过,此article会向您展示如何使用UIPickerView来实现您自己的选择器(接近您想要的)。将其转换为C#应该不会太难。

一旦拥有了自己的UITimeZonePicker,就可以轻松为MonoTouch.Dialog创建TimeZoneElement(主要是复制/粘贴DateElement)。