问题
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:
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]];
}
来源:https://stackoverflow.com/questions/19339877/show-image-in-viewcontroller-when-button-is-clicked-in-secondviewcontroller