Программно установить текст UISegmentedControl из переменной

У меня есть UISegmentedControl в моем представлении с использованием раскадровки, и текст в настоящее время устанавливается программно с использованием следующих строк кода:

[segMonth setTitle:@"Month 1" forSegmentAtIndex:0];
[segMonth setTitle:@"Month 2" forSegmentAtIndex:1];

У меня также есть функция даты, использующая этот код, который получает номер (1-12) текущего месяца:

// Date
    NSDate *now = [NSDate date];
    NSString *strDate = [[NSString alloc] initWithFormat:@"%@",now];
    NSArray *arr = [strDate componentsSeparatedByString:@" "];
    NSString *str;
    str = [arr objectAtIndex:0];

    NSArray *arr_my = [str componentsSeparatedByString:@"-"];

    NSInteger month = [[arr_my objectAtIndex:1] intValue];
//End Date

Я пытаюсь назвать первый сегмент текущим месяцем «декабрь», а второй сегмент — следующим месяцем «январь».

Я попытался использовать следующий код, но он не работает:

[segMonth setTitle:@"%d" forSegmentAtIndex:0];
[segMonth setTitle:@"%d" forSegmentAtIndex:1];

Очевидно, что это также даст только номер месяца, а не имя.


person Jack    schedule 29.12.2012    source источник
comment
stackoverflow.com/questions/4488373/   -  person Dinesh Raja    schedule 29.12.2012


Ответы (4)


Я видел ваш код, который содержит очень сложный способ получить месяц от NSDate Я знаю, что это может быть не ответ. Но я просто прошу вас проверить этот код, чтобы узнать, как правильно получить месяц, день, время или что-то еще, отделенное от NSDate.

NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:NSMonthCalendarUnit fromDate:today];
NSInteger currentMonth = [components month]; // this will give you the integer for the month number

[components setMonth:1];
NSDate *newDate = [gregorian dateByAddingComponents:components toDate:today options:0];
NSDateComponents *nextComponents = [gregorian components:NSMonthCalendarUnit fromDate:newDate];

ОБНОВЛЕНО:

NSInteger nextMonth = [nextComponents month]; // this will give you the integer for the month number

и, как сказал @Prince, вы можете получить название месяца от NSDateFormatter. Во всяком случае, я повторяю, чтобы вы поняли.

NSDateFormatter *df = [[NSDateFormatter alloc] init];
NSString *currentMonthName = [[df monthSymbols] objectAtIndex:(currentMonth-1)];
NSString *nextMonthName = [[df monthSymbols] objectAtIndex:(nextMonth-1)];

[segMonth setTitle:currentMonthName forSegmentAtIndex:0];
[segMonth setTitle:nextMonthName forSegmentAtIndex:1];
person Dinesh Raja    schedule 29.12.2012
comment
Я реализовал ваш код, и он, похоже, работает, однако я попытался изменить дату на своем телефоне для проверки. Я изменил его на июнь, первый сегмент правильно меняется на июнь, однако второй сегмент по-прежнему говорит, что январь.... - person Jack; 30.12.2012
comment
Я также получаю «Неиспользуемая переменная« nextComponents » - person Jack; 30.12.2012
comment
@Jack Я обновил код и добавил текст ОБНОВЛЕНО перед обновленной строкой .. проверьте сейчас - person Dinesh Raja; 30.12.2012

Вы передаете средство форматирования строк и ожидаете, что оно будет содержать название месяца. Пытаться

[segMonth setTitle:[NSString stringWithFormat:@"%@",str1] forSegmentAtIndex:0];
[segMonth setTitle:[NSString stringWithFormat:@"%@",str2] forSegmentAtIndex:1];

str1 и str2 должны быть строками, содержащими название месяца (доступно через NSDateFormatter).

person Stavash    schedule 29.12.2012

Получить месяц из числа следующим образом:

 NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
 NSString *monthName = [[df monthSymbols] objectAtIndex:(yourMonthNumberHere-1)];

Теперь используйте его:

 [segMonth setTitle:monthName forSegmentAtIndex:0];
person Paresh Navadiya    schedule 29.12.2012

int currentMonth = 12;   //December
int nextMonth = 1;   //January
NSDateFormatter *df1 = [[[NSDateFormatter alloc] init] autorelease];
NSString *currentMonthName = [[df1 monthSymbols] objectAtIndex:(currentMonth-1)];

NSDateFormatter *df2 = [[[NSDateFormatter alloc] init] autorelease];
NSString *nextMonthName = [[df2 monthSymbols] objectAtIndex:(nextMonth-1)];

[segMonth setTitle:currentMonthName forSegmentAtIndex:0];
[segMonth setTitle:nextMonthName forSegmentAtIndex:1];

Обратите внимание, что вам нужно будет вычесть 1 из вашего currentMonth и nextMonth (то есть от 1 до 12), так как monthSymbols отсчитывается от нуля.

person Shabib    schedule 29.12.2012
comment
это просто демонстрация, вы должны динамически принимать значения месяца. - person Shabib; 08.01.2013