2016-05-26 17 views
0

こんにちは、私は現在、ちょうど "Segueのための準備を通してコンテンツを送信してしまったと思う"と思いますが、問題は私の画像が2番目のビューコントローラに表示されないことです。私はこれに少し慣れているので、私が最初のView Controllerのイメージを私の2番目のView Controllerに表示することができないために、何かが欠けているかどうかを知りたいと思っています。UIImageが最初のビューコントローラ経由で受信されていません

GroupsViewController.h

#import <UIKit/UIKit.h> 
@interface GroupsViewController : UIViewController<UICollectionViewDataSource, UICollectionViewDelegate> 
@property (weak, nonatomic) IBOutlet UICollectionView *GroupsCollectionView; 

- (IBAction)cellToggleAction:(id)sender; 

@end 

GroupsViewController.m

#import "GroupsViewController.h" 
#import "GroupsHomeViewController.h" 
#import "CustomCell.h" 


@interface GroupsViewController() 
{ 
    NSArray *arrayOfImages; 
    NSArray *arrayOfDescriptions; 
} 

@end 

@implementation GroupsViewController 
{ 
    NSString *reuseIdentifier; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[self GroupsCollectionView]setDataSource:self]; 
    [[self GroupsCollectionView]setDelegate:self]; 
    reuseIdentifier= @"SmallIcon"; //set inital value of reuse identifier 

    arrayOfImages = [[NSArray alloc]initWithObjects:@"a.png", nil]; 

    arrayOfDescriptions = [[NSArray alloc]initWithObjects:@"A", nil]; 
} 

-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView 
{ 
    return 1; 
} 

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    return [arrayOfDescriptions count]; 
} 

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath]; 
    [[cell IconImage]setImage:[UIImage imageNamed:[arrayOfImages objectAtIndex:indexPath.item]]]; 
    [[cell IconLabel]setText:[arrayOfDescriptions objectAtIndex:indexPath.item]]; 
    return cell; 
} 

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"GroupsHomeSegue" sender:indexPath]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([segue.identifier isEqualToString:@"GroupsHomeSegue"]) 
    { 
     NSIndexPath* indexPath = [[self.GroupsCollectionView indexPathsForSelectedItems]firstObject]; 
     if(indexPath !=nil) 
     { 
      //NSString *selectedDescription = arrayOfDescriptions[indexPath.item]; //collects description from cell 
      NSString *selectedImage = arrayOfImages [indexPath.item]; //collects image from cell 

      GroupsHomeViewController *groupsHomeViewController = segue.destinationViewController; 
      groupsHomeViewController.logoImage = [UIImage imageNamed: selectedImage]; 
      //groupsHomeViewController.groupLabel = [:selectedDescription]; 

     } 
    } 
} 


- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
     //Dispose of any resources that can be recreated. 
    } 

@end 

GroupsHomeViewController.h

#import <UIKit/UIKit.h> 

@interface GroupsHomeViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> 

@property (strong, nonatomic) IBOutlet UIImage *logoImage; 
@property (strong, nonatomic) IBOutlet UILabel *groupLabel; 

@end 

GroupsHomeViewController.m

#import "GroupsHomeViewController.h" 

@interface GroupsHomeViewController() 

@end 

@implementation GroupsHomeViewController 

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
} 
- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

ご協力いただきありがとうございます。

+0

文字列だけを渡してみてください。 NSStringが2番目のUIViewControllerに記録されている場合、デバッグするだけです。 – Anil

+0

デバッグ中に何も起こっていないようですが、空白の画面が表示されます。コードが何をしているかを示すために何かをオンにする必要がありますか? –

+0

ブレークポイントを設定し、同じデバッグ? – Anil

答えて

2

リー・サグデン、

画像を渡すだけでは不十分です:)あなたはそれがあなたの画面上に表示したい場合は、ImageViewの中でそれをロードする必要があり今のいずれかのプログラムでUIImageViewを作成していません:)

または、IBOutletを描き、あなたのストーリーボードでImageViewのを追加し、他の

self.yourImageView.image = self.logoImage; 

がプログラムとしてUIImageViewを作成して画像を設定

UIImageView *yourImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,self.logoImage.size.width,self.logoImage.size.height)]; 
    yourImageView.image = self.logoImage; 
    [self.view addSubview:yourImageView]; 
+0

これまで行ってきたことは、画像を送信する限り正しいですが、私はそれを表示できるように画像を受信するために私の2番目のビューコントローラにコードを追加する必要がありますか? –

+0

@LeeSugden:あなたは既に画像のバディを受け取っています:)あなたがしなければならないのは、UIに表示するコードを書くことだけです:ストーリーボードまたはxibを使用している場合は、UIImageViewを追加してIBOutletを描画し、私は上に書いた:)あなたがそれらの両方を使用していない場合は、プログラムでimageViewを作成し、ビューにサブビューとして追加する:) –

0

問題はGroupsHomeViewControllerにあります。 UIImageではなくIBOutletUIImageViewが必要です。画像ビューのimageプロパティを希望の画像に設定する必要があります。これを行うには、あなたがそうのようなあなたのGroupsHomeViewController.hファイルを更新する必要があります:あなたがlogoImageを設定すると、今

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.logoImageView.image = self.logoImage; 
} 

:あなたのGroupsHomeViewController.mで、その後

@interface GroupsHomeViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> 

@property (strong, nonatomic) IBOutlet UIImageView *logoImageView; 
@property (strong, nonatomic) UIImage *logoImage; 
@property (strong, nonatomic) IBOutlet UILabel *groupLabel; 

@end 

そして、viewWillAppearであなたの画像ビューの画像を設定します画像ビューは、ビューが表示される直前に画像をロードします。

これは、イメージビューがすでにストーリーボードにあり、コンセントが正しく接続されていることを前提としています。

0

私は上記の人が、画像ビューを保持している画像に設定するアドバイスを使ってこれを解決したと思います。しかし、まだ解決していないのであれば、prepareForSegueを使って、変数が設定されていないiOSのブードゥーに問題があります。したがって、確実にGroupsHomeViewController.m内のセッターをオーバーライドして、オブジェクトがイメージプロパティに正しく割り当てられていることを確認してください。

- (void)setLogoImage:(UIImage *)logoImage 
{ 
    _logoImage = logoImage; 
} 
関連する問題