2013-04-17 2 views
1

У меня очень простая, но неприятная проблема. В моем методе didSelectRowAtIndexPath: я пытаюсь изменить UIImageView на другое изображение, но, к сожалению, оно не работает, а UIImageView остается неизменным.Как изменить изображение UIImageView в другом контроллере?

Что я делаю неправильно?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    MainViewController *demoController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil]; 
    demoController.title = [NSString stringWithFormat:@"Demo Controller #%d-%d", indexPath.section, indexPath.row]; 

    NSArray *controllers = [NSArray arrayWithObject:demoController]; 
    self.sideMenu.navigationController.viewControllers = controllers; 
    [self.sideMenu setMenuState:MFSideMenuStateClosed]; 

    if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"server"] isEqualToString:@"imap.mail.me.com"]){ 
     if (indexPath.row == 0) 
      theAppDelegate.folder = @"INBOX"; 
      UIImage *image = [UIImage imageNamed:@"inbox.png"]; 
      demoController.imageBG.image = image; 

     if (indexPath.row == 1) 
      theAppDelegate.folder = @"Sent Messages"; 
     UIImage *image2 = [UIImage imageNamed:@"sentmail.png"]; 
     demoController.imageBG.image = image2; 

     if (indexPath.row == 2) 
      theAppDelegate.folder = @"Drafts"; 
     UIImage *image3 = [UIImage imageNamed:@"drafts.png"]; 
     demoController.imageBG.image = image3; 

     if (indexPath.row == 3) 
      theAppDelegate.folder = @"Deleted Messages"; 
     UIImage *image4 = [UIImage imageNamed:@"trash.png"]; 
     demoController.imageBG.image = image4; 

     if (indexPath.row == 4) 
      theAppDelegate.folder = @"Archive"; 
     UIImage *image5 = [UIImage imageNamed:@"archive.png"]; 
     demoController.imageBG.image = image5; 

     if (indexPath.row == 5) 
      theAppDelegate.folder = @"Junk"; 
     UIImage *image6 = [UIImage imageNamed:@"junk.png"]; 
     demoController.imageBG.image = image6; 

    } 
} 

ответ

0

Согласно этой if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"server"] isEqualToString:@"imap.mail.me.com"]) получит истинное средство, ваш demoController.imageBG.image всегда junk.png.

Я думаю, что вам не хватает {} между if корпус.

Он должен быть, как этого

if (indexPath.row == 0) 
{ 
    theAppDelegate.folder = @"INBOX"; 
    UIImage *image = [UIImage imageNamed:@"inbox.png"]; 
    demoController.imageBG.image = image;  
} 
if (indexPath.row == 1) 
    ......... 

Примечание: Пока вы сочинительство этого типа кодирования лучшего использованию else-if ИЛИ switch-case.

+0

Я добавил {}, и он по-прежнему не меняется. Еще до этого я даже не получил «junk.png». –

+0

Положите точку останова на эту строку 'if ([[[[NSUserDefaults standardUserDefaults] objectForKey: @" server "] isEqualToString: @" imap.mail.me.com "])', Проверьте, истинна ли эта строка или нет. – Mani

+0

Я знаю, что это правда, иначе папки не будут меняться, и они это сделают. –

0

Кулак вы пропустите {} для if условия так что здесь вы получите junk.png изображение на вашем UIImageView каждый раз, когда ...

Также здесь вместо вашей этой логики, вы можете просто передать имя изображения в NSString ...

только свойство-синтезировать строку и передать в вашем MainViewController классе, как сильфона ...

=>MainViewController.h

@property (nonatomic, retain) NSString *strImageName; 

=>MainViewController.m

@synthesize strImageName; 

и просто передать это имя в этой переменной, как вы выше код ...

if (indexPath.row == 0){ 
    theAppDelegate.folder = @"INBOX"; 
    demoController.strImageName = @"inbox.png"; 
    [demoController.strImageName retain]; 
    } 
    else if (indexPath.row == 1){ 
     theAppDelegate.folder = @"Sent Messages"; 
    demoController.strImageName = @"sentmail.png"; 
    [demoController.strImageName retain]; 
    } 

и в методе viewDidLoad ваши MainViewController «ы просто присвоить этот образ как bellow ..

- (void)viewDidLoad 
{ 
     [super viewDidLoad]; 
     UIImage *image = [UIImage imageNamed:strImageName]; 
     imageBG.image = image; 
} 
Смежные вопросы