Show image in ViewController when button is clicke

2019-04-17 15:23发布

How to show an UIIimage by clicking on an UIButton inside another UIViewController? I would like to add to the same UIButton the command to add an image to the SecondViewController. Excused my poor question.

myProtocol.h

#import <Foundation/Foundation.h>

@protocol myProtocol <NSObject>

-(UIImage *)transferImage;

@end

ViewController.h

#import "SecondClass.h"

@interface ViewController : UIViewController<myProtocol, UINavigationControllerDelegate>{
    UIView *view;
}

@property (nonatomic,retain) UIImageView *imageView;

- (IBAction)sendImage:(id)sender;

@end

ViewController.m

#import "ViewController.h"
#import "SecondViewController.h"
#import "myProtocol.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad{

    [super viewDidLoad];
    _imageView = [[UIImageView alloc]initWithImage:
                                     [UIImage imageNamed:@"VoodooVibe@2x.png"]];
    [view addSubview:_imageView];
    NSLog(@"I am in VC.m");
}

-(UIImage *)transferImage{

    NSLog(@"I am in transferImage");
    return _imageView.image;
}

- (IBAction)sendImage:(id)sender {

    SecondViewController *secClass = [[SecondViewController alloc]init];
    secClass.delegate=self;    
    [secClass callTransfer];
    NSLog(@"I am in sender");
    [self.navigationController pushViewController:secClass animated:YES];
}

- (void)didReceiveMemoryWarning{

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

SecondViewController.h

#import <UIKit/UIKit.h>
#import "myProtocol.h"
#import "ViewController.h"

@interface SecondViewController :UIViewController
                                  <myProtocol,UINavigationControllerDelegate> {
    UIView *secondView;
    IBOutlet UIImageView *myImage;
    id <myProtocol> myDelegate;
}

@property (nonatomic,retain) UIImageView *myImage;
@property(nonatomic,assign) id delegate;

-(void)callTransfer;

@end

SecondViewController.m

#import "SecondViewController.h"
#import "ViewController.h"
#import "myProtocol.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

@synthesize delegate,myImage;

- (id)initWithNibName:(NSString *)nibNameOrNil 
               bundle:(NSBundle *)nibBundleOrNil{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad{

    [super viewDidLoad];
// Do any additional setup after loading the view.
    [secondView addSubview:myImage]; 
}

-(void)callTransfer{

    myImage.image=[delegate performSelector:@selector(transferImage)];
    myImage.image=[UIImage imageNamed:@"VoodooVibe@2x.png"];
    NSLog(@"%@",myImage.image);
    NSLog(@"I am in call transfer");
}

- (void)didReceiveMemoryWarning{

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

1条回答
We Are One
2楼-- · 2019-04-17 16:21

Delegates should normally be used, if you you have a class included inside your UIViewController which will do something and notify you with the delegate method when the specific process has finished. But in this case you would set an UIImage two times. Once by your delegate and a second time by setting an UIImage programmatically.

You shouldn't do anything like calling a method for initializing the UIImage of the second UIViewController from outside. Just call everything inside viewDidLoad and you don't have to care about it, because the UIViewController handles it itself.

You just have to insert an UIImageView inside your SecondViewController and connect it to your header file. then you can access it inside the m. file. I had the problem that I first used a jpg instead of a png, but after changing the suffix everything worked fine.

ViewController.m

- (IBAction)sendImage:(id)sender {

    SecondViewController *secClass = [[SecondViewController alloc] init];
    [secClass setImageName:@"pic.png"];
    [self.navigationController pushViewController:secClass
                                         animated:YES];

}

SecondViewController.h

@interface SecondViewController : UIViewController

@property (strong, nonatomic)NSString *imageName;
@property (weak, nonatomic) IBOutlet UIImageView *myImage;

@end

SecondViewController.m (There are just these two lines)

- (void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];
    [_myImage setImage:[UIImage imageNamed:_imageName]];
}
查看更多
登录 后发表回答