Я не верю, что это возможно - нет возможности установить часовой пояс для объекта Date после его создания.
И в некотором смысле это имеет смысл - концептуально (если, возможно, не в реализации); за http://en.wikipedia.org/wiki/Unix_timestamp (выделение мое):
Время Unix, или время POSIX, представляет собой систему для описания моментов во времени, определяется как количество секунд, прошедших с полуночи Всемирное координированное время (UTC) четверга, 1 января 1970 года.
После того, как вы его построите, он будет представлять определенную точку в «реальном» времени. Часовой пояс имеет значение только тогда, когда вы хотите преобразовать этот абстрактный момент времени в удобочитаемую строку.
Таким образом, имеет смысл, что вы сможете изменить только фактическое время, которое Date представляет в конструкторе. К сожалению, кажется, что нет никакого способа передать в явном часовом поясе - и конструктор, который вы вызываете (возможно, правильно), переводит ваши «локальные» переменные времени в GMT, когда он канонически сохраняет их - поэтому нет способа использовать int, int, int
конструктор для времени по Гринвичу.
С другой стороны, тривиально просто использовать конструктор, который принимает строку. Вам даже не нужно конвертировать числовой месяц в строку (по крайней мере, в Firefox), поэтому я надеялся, что наивная реализация сработает. Тем не менее, после его тестирования он успешно работает в Firefox, Chrome и Opera, но не работает в Konqueror («Неверная дата»), Safari («Неверная дата») и IE («NaN»). Я полагаю, у вас просто есть массив поиска для преобразования месяца в строку, например:
var months = [ '', 'January', 'February', ..., 'December'];
function createGMTDate(xiYear, xiMonth, xiDate) {
return new Date(months[xiMonth] + ' ' + xiDate + ', ' + xiYear + ' 00:00:00 GMT');
}
Вот пример того, что я сделал в похожей ситуации. Я хотел создать панель инструментов с помощью Interface Builder, но переключать один из BarButtonItems в зависимости от того, был ли он «отмечен». В этом примере следует отметить несколько ключевых моментов. Следующие 2 переменные-члены определены для класса в файле заголовка:
NSMutableArray *toolbarItems;
IBOutlet UIToolbar *toolbar;
NSUInteger checkUncheckIndex;
Когда я хочу обновить проверенный статус, я вызываю эту функцию ... Обратите внимание, что существует определенный селектор с именем checkUncheckClicked, который вызывается, когда конкретный нажата кнопка в UIToolbar. А UIToolbar настроен как IBOutlet для панели инструментов. В качестве альтернативы вы можете подключить UIBarButtonItem как выход и использовать его как свою логику для определения индекса кнопки, или, если на то пошло, вы можете жестко запрограммировать индекс кнопки, если что-то выиграет ' t меняются со временем. Наконец, есть checked.png и unchecked.png, которые можно переключать между включенными в проект.
- (void)updateBarButtonItemChecked:(BOOL)checked {
if (toolbarItems == nil) {
toolbarItems = [[NSMutableArray arrayWithArray:toolbar.items] retain];
checkUncheckIndex = -1;
for (NSUInteger i = 0; i < [toolbarItems count]; i++) {
UIBarButtonItem *barButtonItem = [toolbarItems objectAtIndex:i];
if (barButtonItem.action == @selector(checkUncheckClicked)) {
favoriteIndex = i;
break;
}
}
}
if (checkUncheckIndex != -1) {
UIBarButtonItem *barButtonItem = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:checked ? @"checked.png" : @"unchecked.png"]
style:UIBarButtonItemStylePlain target:self action:@selector(checkUncheckClicked)] autorelease];
[toolbarItems replaceObjectAtIndex:checkUncheckIndex withObject:barButtonItem];
toolbar.items = toolbarItems;
}
}
И, конечно, toolbarItems и toolbar должны быть освобождены в вашем освобождении для класса.
Надеюсь, это поможет!
Попробуйте:
- (void)setTitle:(NSString *)title forItem:(int)item ofToolbar:(UIToolbar *)tb {
NSMutableArray *newItems = [tb.items mutableCopy];
UIBarButtonItem *old = [newItems objectAtIndex:1],
*titled = [[UIBarButtonItem alloc] initWithTitle:title style:old.style target:old.target action:old.action];
[newItems replaceObjectAtIndex:1 withObject:titled];
tb.items = newItems;
[titled release];
}
Думаю, это должно быть возможно. Вы можете попробовать создать IBOutlet для этой конкретной кнопки в своем классе ViewController и подключить кнопку из IB к этому выходу, или вы можете использовать свойство items этого экземпляра UIToolbar (у вас есть ссылка на это, не так ли? ?) и найдите там соответствующий элемент, создайте новый массив NSArray с измененными элементами и установите его обратно в свойство toolbar.items.
HTH
Вот подход, который я использовал Казалось бы, гораздо проще управлять панелью инструментов полностью программно, так что ....
В вашем контроллере представления объявляется 1 или несколько наборов элементов UIBarButtonItem как элементы свойств, а также объявляется и подключается панель инструментов как свойство UIToolbar. Также объявите 1 или несколько массивов для хранения элементов.
В реализации В viewDidLoad выделите и установите ваши UIBarButtonItems, например
playButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemPlay
target:self
action:@selector(handlePlayClick)];
Гибкие кнопки (для выравнивания и т.д.) объявлены следующим образом
flexButton1 =[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil action:nil];
Существует несколько методов initMethods для обработки различных типов кнопок, поддерживаемых панелями инструментов. Все следуют синтаксису, аналогичному приведенному выше. Обращает на себя внимание цель и настройки действий. Target: обычно будет self, действие - это имя функции, которую должна запускать кнопка.
После выделения ваших UIBarButton добавьте их в массив с помощью initWithObjects.
Затем, чтобы назначить кнопки панели инструментов, вы должны вызвать
[toolbar setItems:<array name>];
Не забудьте освободить UIBarButton и массивы в конце кода.
Надеюсь, это поможет. Если вам нужно больше кода, дайте мне знать.
Рич Д.
Примечание - панель инструментов удалит любой цвет из ваших значков, так что вы все равно не сможете сделать его желтым. Вам нужно будет изменить форму изображения, чтобы указать "на" вместо этого.
В качестве альтернативы вам нужно загрузить свои панели кнопок с UIButtonItems (используйте initWithCustomView) и установить изображение кнопки соответствующим образом.
HTH