2012-01-31 49 views
0

我有一個方法,我從我的主視圖調用,即設置我想要顯示在滾動視圖中的圖像的圖像名稱。如何重新加載當前UIView

- (void)loadImage:(NSString *)myImageName 
    { 
     if (myImageName == @"one") { 
      imageName = myImageName; 
     } 
     if (myImageName == @"two") { 
      imageName = myImageName; 
     } 
     if (myImageName == @"three") { 
      imageName = myImageName; 
     } 

     //Reloads view here??? 
    } 

我加載在我viewDidLoad方法的相似圖片時,我設置爲從parentview的imagename從tableviewcell選擇我NSString的向下傳遞到的LoadImage所以

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    //Create scrollview 
    scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    scrollView.delegate = self; 
    scrollView.bounces = NO; 

    //Create scrollviewimage 
    if (imageName == @"one") { 
     image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ha.png"]]; 
    } 
    if (imageName == @"two") { 
     image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"haha.png"]]; 
    } 
    if (imageName == @"three") { 
     image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"hahaha.png"]]; 
    } 



    containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 550)]; 
    //Add subview 
    [containerView addSubview:image]; 
    //initViews 
    scrollView.contentSize = containerView.frame.size; 
    [scrollView addSubview:containerView]; 

    //scrolling 
    scrollView.minimumZoomScale = 1.0; 
    scrollView.maximumZoomScale = 31.0; 
    [scrollView setZoomScale:scrollView.minimumZoomScale]; 

    //highrachy 
    [self.view addSubview:scrollView]; 

} 

會發生什麼事..然後載荷圖像設置viewdidload中的名稱..但是,發生的事情是,只有第一個選擇劑量任何東西..所以你總是會看到你選擇的第一個圖像..所以,如果你選擇圖像兩個你選擇的每個其他圖像將顯示圖像二..

an Ÿ幫助會很好。

這裏是parentview小區選擇是什麼樣子

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //Sets the back button for the new view that loads (this overrides the usual parentview name with "Back") 
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordered target:nil action:nil]; 

    if (!self.detailViewController) { 
     self.detailViewController = [[ICDDetailViewController alloc] initWithNibName:@"ICDDetailViewController" bundle:nil]; 

     if (indexPath.section == 0) { 
      _detailViewController.imageName = @"one"; 
      //  NSLog(@"%@", indexPath); 
     } 
     if (indexPath.section == 1) { 
      _detailViewController.imageName = @"two"; 
      //  NSLog(@"%@", indexPath); 
     } 
     if (indexPath.section == 2) { 
      _detailViewController.imageName = @"three"; 
      //  NSLog(@"%@", indexPath); 
     } 
    } 
    [self.navigationController pushViewController:self.detailViewController animated:YES]; 

} 

回答

3

請勿使用myImageName == @「three」。有一種比較字符串的特殊方法。

試試這個:

if ([myImageName isEqualToString:@"three"]) { 
    [image setImage:[UIImage imageNamed:myImageName]]; 
} 

如果有一個文件擴展名,這樣做:

NSString *imagePath = [NSString stringWithFormat:@"%@.png",myImageName]; 
[image setImage:[UIImage imageNamed:imagePath]]; 

順便說一句,你仍然張貼的舊代碼,你在你的另一個問題了。您將您的detailView保留在原始類中,而不是釋放並創建新實例。取出if(!detailView)語句。

更新:唯一的其他選擇是從大的if()塊中取出分配。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //Sets the back button for the new view that loads (this overrides the usual parentview name with "Back") 
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordered target:nil action:nil]; 

    if (!self.detailViewController) { 
     self.detailViewController = [[ICDDetailViewController alloc] initWithNibName:@"ICDDetailViewController" bundle:nil]; 


    //MY CHANGES HERE: 
    //If you left these if() statements inside the original code, they would never 
    //fire if the detailView was already instantiated once. Does this make sense? 
    } // <--- moved the bracket up here 
     if (indexPath.section == 0) { 
      _detailViewController.imageName = @"one"; 
      //  NSLog(@"%@", indexPath); 
     } 
     if (indexPath.section == 1) { 
      _detailViewController.imageName = @"two"; 
      //  NSLog(@"%@", indexPath); 
     } 
     if (indexPath.section == 2) { 
      _detailViewController.imageName = @"three"; 
      //  NSLog(@"%@", indexPath); 
     } 
    //} <--- commented this one out 
    [self.navigationController pushViewController:self.detailViewController animated:YES]; 

} 

唯一的另一種方法是這樣的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    //Sets the back button for the new view that loads (this overrides the usual parentview name with "Back") 
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordered target:nil action:nil]; 
    //commented out the next line, don't need to check to see if it's already present 
    //just create a new instance to push on the stack 
    //if (!self.detailViewController) { 
     self.detailViewController = [[ICDDetailViewController alloc] initWithNibName:@"ICDDetailViewController" bundle:nil]; 

     if (indexPath.section == 0) { 
      _detailViewController.imageName = @"one"; 
      //  NSLog(@"%@", indexPath); 
     } 
     if (indexPath.section == 1) { 
      _detailViewController.imageName = @"two"; 
      //  NSLog(@"%@", indexPath); 
     } 
     if (indexPath.section == 2) { 
      _detailViewController.imageName = @"three"; 
      //  NSLog(@"%@", indexPath); 
     } 
    //} <--- get rid of this bracket since the original if() was commented out 
    [self.navigationController pushViewController:self.detailViewController animated:YES]; 

} 
+0

opps現在這樣做。 – 2012-01-31 22:19:29

+0

它工作?爲了更加清晰,我更新了答案。 – Justin 2012-01-31 22:57:57

1

這聽起來像你是不是曾經釋放你的UIScrollView的實例。所以,當你第二次重用它時,viewDidLoad不會再被調用。這意味着你的'圖像'變量永遠不會被重新分配一個新的圖像。

要檢查是否屬實,請嘗試在您的viewDidLoad方法中放入NSLog調用,並查看它是否在第二次從tableViewCell中選擇時調用。

如果是這種情況,有幾個選項可以修復它。你在使用ARC嗎?

+0

我使用ARC .. – 2012-01-31 22:16:43

+0

我只是把一個NSLog的在每個如果裏面viewDidLoad中和喜歡的形象,返回是唯一一個statments第一個被選中的只有一次。 – 2012-01-31 22:17:46

+1

太棒了,所以現在你知道問題是什麼,你只需要修復它。我建議直接在你的loadImage:方法的末尾用[image setImage:[UIImage imageNamed:imageName])來爲你的'image'類設置image屬性。 – AtkinsonCM 2012-01-31 22:28:00

0

您是否嘗試過更新UIImageView

- (void)loadImage:(NSString *)myImageName 
{ 
    if (myImageName == @"one") { 
     imageName = myImageName; 
    } 
    if (myImageName == @"two") { 
     imageName = myImageName; 
    } 
    if (myImageName == @"three") { 
     imageName = myImageName; 
    } 

    [image setImage:[UIImage imageNamed:imageName]; 
}