如何创建一个iOS时区选择器?

4
我的应用是给飞行员使用的日志本,我想要让用户选择将应用程序放在他们选择的时区中。航空公司的飞行员可能会飞过整个世界,但在输入飞行信息时必须参考他们所在地的家庭基地时区。我想提供一个UI界面,允许他们选择时区选项,如“本地”(根据其位置而定的设备本地时间),“协调世界时”,然后是“自定义”这个比较难的选项。
我使用MonoTouch.Dialog来连接集合,但问题是在iOS中,时区列表相当长。我使用System.TimeZoneInfo命名空间获取时区列表,就像在Windows中一样。然而,iOS使用的显示格式是“美国/纽约,美国/XYZ等”。因此,为了使这个列表管理起来更容易,我需要通过分割斜杠来分解它,以便我可以首先呈现一个国家列表,用户点击该列表,然后在UITableView中呈现第二个列表,即区域,例如“纽约”。然后我将捕获时区并使用System.TimeZoneInfo方法从UTC转换为自定义时区。
我的问题是如何在MonoTouch.Dialog中同时具有集合和子集合。即一个包含了国家列表的UITableView,具有指示符号,可以带您进入国家/地区的区域列表?
在同样的问题上,是否有其他人在iOS(Xcode或MonoTouch)中实现了“时区”选择器/选择器?
感谢您对此问题的建议和帮助。
2个回答

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);

它生成了这个用户界面:

主要用户界面
(来源: tirania.org)

嵌套元素看起来像这样:

嵌套
(来源: tirania.org)


杰出的Miguel - 谢谢!iOS如何处理时区与Windows相比真是奇怪! :) - Neal

1
同样的问题,有没有其他人在iOS(Xcode或MonoTouch)中实现了“时区”选择器/选择器?
我没有看到有人做到这一点。但是,这篇文章向您展示如何使用UIPickerView来实现自己的选择器(接近您想要的)。将其转换为C#应该不太困难。
一旦您拥有自己的UITimeZonePicker,那么创建一个TimeZoneElement用于MonoTouch.Dialog就很容易了(大部分都是复制/粘贴DateElement)。

ActionSheetPicker有一个ActionSheetLocalePicker子类,提供了一个UIPickerView-based的解决方案。值得一看:https://github.com/skywinder/ActionSheetPicker-3.0 - Robin Macharg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接