Проверьте, равен ли текст в UILabel строке iOS Цель C - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть UILabel, где я говорю, является ли это «День, День Б и т. Д.»В нашей школе проходит дневная ротация AG, поэтому она сообщает пользователям, какой сегодня день.(Дни взяты из большого NSDictionary, который сопоставляет буквенные дни с реальными датами)

Я хочу отобразить другое изображение в зависимости от того, какой сегодня день.так что-то вроде

// (in pseudo-code) 

if [UILabel == @"A Day"]{ 
    image.image = [UIImage imageNamed:@"Aday.jpg"];
}

Я добавляю A Day в свой ярлык следующим образом: [dictionary setObject:@"A Day" forKey:@"2012-05-15"]; затем выполняю [letterday setText:[dictionary objectForKey:LetterDay]];.

Есть ли способ использовать этот же словарь и сделатьчто я пытаюсь выше?

Какой правильный способ сделать это?

Спасибо!

edit: это то, что у меня есть ... все еще не работает.Какие-нибудь советы?

NSMutableDictionary *imageforlabel = [[NSMutableDictionary alloc] init];


                [imageforlabel setObject:[UIImage imageNamed:@"ADay.png"] forKey:@"A Day"];
                [imageforlabel setObject:[UIImage imageNamed:@"BDay.png"] forKey:@"B Day"];
                [imageforlabel setObject:[UIImage imageNamed:@"CDay.png"] forKey:@"C Day"];
                [imageforlabel setObject:[UIImage imageNamed:@"DDay.png"] forKey:@"D Day"];
                [imageforlabel setObject:[UIImage imageNamed:@"EDay.png"] forKey:@"E Day"];
                [imageforlabel setObject:[UIImage imageNamed:@"FDay.png"] forKey:@"F Day"];
                [imageforlabel setObject:[UIImage imageNamed:@"GDay.png"] forKey:@"G Day"];

rotationday.image = [imageforlabel objectForKey:letterday.TEXT];

Ответы [ 5 ]

5 голосов
/ 17 февраля 2012

Определите ivar NSDictionary *imageForLabel и настройте его в указанном вами инициализаторе следующим образом:

imageForLabel = [NSDictionary dictionaryWithObjectsAndKeys:
    [UIImage imageNamed:@"Aday.jpg"], @"A Day"
,   [UIImage imageNamed:@"Bday.jpg"], @"B Day"
,   [UIImage imageNamed:@"Cday.jpg"], @"C Day"
,   // ...and so on
,   nil];

Затем во время выполнения найдите изображение из NSDictionary:

UIImage *image = [imageForLabel objectForKey:label.text];
5 голосов
/ 17 февраля 2012

Код, который вы ищете, это:

if ([myLabel.text isEqualToString:@"A Day"]) {

Но это ужасный способ написания вашей программы. Где-то вы решили поместить строку @"A Day" в ярлык. Это , где вы также должны решить, какое изображение отображать.

Редактировать

В ответ на ваш комментарий: одним из простых подходов было бы иметь словарь, который отображает каждую строку даты на соответствующее изображение. Пример:

[labelMap setObject:@"A Day" forKey:dateString];
[imageMap setObject:[UIImage imageNamed:@"Aday.jpg"] forKey:dateString];

...

letterDayLabel.text = [labelMap objectForKey:letterDay];
letterDayImage.image = [imageMap objectForKey:letterDay];

Несколько более сложный подход, который я, вероятно, использовал бы в своей собственной реализации, заключается в создании класса RotationDay, который представляет конкретный день в ротации и содержит «активы» для каждого дня: день дня ярлык и изображение. В будущем, если вы добавите больше ресурсов (несколько изображений за один день или короткую метку и длинную метку, или анимацию, или звуки), вы добавите их в класс. Пример:

@interface RotationDay : NSObject
@property (strong, nonatomic, readonly) NSString *labelText;
@property (strong, nonatomic, readonly) UIImage *image;

+ (RotationDay *)dayForLetter:(NSString *)letter;
@end

@implementation RotationDay
@synthesize labelText = _labelText;
@synthesize image = _image;

static NSMutableDictionary *daysMap() {
    static NSMutableDictionary *theMap;
    static dispatch_once_t once;
    dispatch_once(&once, ^{ theMap = [[NSMutableDictionary alloc] init]; });
    return theMap;
}

+ (RotationDay *)uncachedDayForLetter:(NSString *)letter {
    RotationDay *day = [[RotationDay alloc] init];
    day->_labelText = [[NSString alloc] initWithFormat:@"%@ Day", letter];
    NSString *imageName = [NSString stringWithFormat:@"%@day.jpg", letter];
    day->_image = [UIImage imageNamed:imageName];
    return day;
}

+ (RotationDay *)dayForLetter:(NSString *)letter {
    NSMutableDictionary *map = daysMap();
    RotationDay *day = [map objectForKey:letter];
    if (!day) {
        day = [self uncachedDayForLetter:letter];
        [map setObject:day forKey:letter];
    }
    return day;
}

@end

Тогда вы бы использовали это так:

[dictionary setObject:[RotationDay dayForLetter:@"A"] forKey:@"2012-05-15"];

...

RotationDay *day = [dictionary objectForKey:LetterDay];
letterday.text = day.labelText;
imageday.image = day.image;
3 голосов
/ 17 февраля 2012
UILabel *label;

if ([label.text isEqualToString:@"A Day"]) {

}

и т. Д.

2 голосов
/ 17 февраля 2012
if ([Your_LAbel.text isEqualtoString : @"A Day"])
{
//Your code;
}
1 голос
/ 17 февраля 2012

Это просто сделать:

Вот код:

[imageView setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@.png",[label text]]]];

В вашем вопросе метка = @ "A Day" и image = "Aday.jpg".Так что я предпочел этот.

image = [image stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 
NSString *finalImageName = [image stringByAppendingString:@"jpg"];
UIImage img = [UIImage imageNamed:finalImageName];

Надеюсь, это сработает для вас

Наслаждайтесь кодированием:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...