2012-01-11 2 views
4

Мое приложение - это журнал для пилотов, и я хотел бы дать пользователю возможность разместить приложение в часовом поясе по своему выбору. Авиационные пилоты могут летать по всему миру, но при вводе информации о рейсе им необходимо обратиться к часовому поясу своей основной базы. Я хочу предложить пользовательский интерфейс, который позволяет им выбирать параметр часового пояса, такой как «Локальный» (который является локальным устройством, в зависимости от их местоположения), «UTC», а затем жесткий «пользовательский».Как создать iOS Time Zone Picker?

Я использую MonoTouch.Dialog, который позволяет подключать коллекцию, но проблема в iOS. Список часовых поясов довольно длинный. Я использую пространство имен System.TimeZoneInfo для извлечения списка часовых поясов, как в Windows. Однако iOS использует презентацию, такую ​​как «Соединенные Штаты/Нью-Йорк, США/XYZ и т. Д.». Поэтому, чтобы сохранить этот список управляемым, мне нужно разбить его, разделив его на /, чтобы я мог представить список стран, пользователь коснется этого, а вторичный список будет представлен в UITableView, который является регионом таких как «Нью-Йорк». Затем я закрою часовой пояс и использую методы System.TimeZoneInfo для преобразования из 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); 

Он производит этот интерфейс:

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

И вложенные элементы выглядеть следующим образом:

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

+0

Выдающийся Мигель - спасибо! Странно, как iOS обрабатывает часовые пояса против Windows! :) – Neal

1

На этой же ноте кто-нибудь еще реализовал селектор/выборщик часового пояса в iOS (Xcode или MonoTouch)?

Я еще не видел один ровно. Однако в этом article показано, как использовать UIPickerView для реализации ваших собственных сборщиков (рядом с тем, что вы хотите). Не должно быть слишком сложно преобразовать это в C#.

После того, как у вас есть свой UITimeZonePicker, тогда должно быть легко создать TimeZoneElement для MonoTouch.Dialog (в основном копирование/вставка DateElement).

+0

ActionSheetPicker имеет ActionShee tLocalePicker, который предлагает решение на основе UIPickerView. Возможно стоит посмотреть: https://github.com/skywinder/ActionSheetPicker-3.0 –