2013-04-17 50 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-ifswitch-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]; 
    } 

,并在您MainViewController的viewDidLoad方法只是分配此图像像波纹管..

- (void)viewDidLoad 
{ 
     [super viewDidLoad]; 
     UIImage *image = [UIImage imageNamed:strImageName]; 
     imageBG.image = image; 
} 
相关问题