2013-10-12 3 views
-1

Как показать UIIimage, нажав на UIButton внутри другого UIViewController? Я хотел бы добавить к той же UIButton команду добавить изображение в SecondViewController. Извините мой бедный вопрос.Показать изображение в ViewController, когда кнопка нажата в SecondViewController

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:@"[email protected]"]]; 
    [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:@"[email protected]"]; 
    NSLog(@"%@",myImage.image); 
    NSLog(@"I am in call transfer"); 
} 

- (void)didReceiveMemoryWarning{ 

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

@end 
+0

Если вы вставляете столько кода, посмотрите в следующий раз, чтобы отформатировать его. Таким образом, его намного проще и быстрее читать. –

ответ

0

Делегаты обычно следует использовать, если у вас есть класс включен в вашем UIViewController, который будет делать что-то и уведомляет вас с делегатом метод, когда конкретный процесс завершен. Но в этом случае вы бы установили UIImage два раза. Один раз на ваш delegate и второй раз, установив UIImage программно.

Вы не должны делать ничего похожего на вызов метода для инициализации UIImage второго UIViewController снаружи. Просто назовите все внутри viewDidLoad, и вам не нужно заботиться об этом, потому что UIViewController обрабатывает его сам.

Вам нужно вставить UIImageView в свой SecondViewController и подключить его к файлу заголовка. то вы можете получить к нему доступ в m. файл. У меня была проблема, что я сначала использовал jpg вместо png, но после изменения суффикса все работало нормально.

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 (Есть только эти две строки)

- (void)viewWillAppear:(BOOL)animated{ 

    [super viewWillAppear:animated]; 
    [_myImage setImage:[UIImage imageNamed:_imageName]]; 
} 
+0

Метод transfertImage должен отправить изображение в SecondVieController ... – Swr79

+0

Я только что создал фрагменты, которые вам нужны для решения вашей проблемы. Я также изменил свой ответ выше. Будьте осторожны с «делегатом», вы просто используете его в неправильном месте. Это не процесс, в котором вам действительно нужен делегат. Лучше использовать, если у вас асинхронная задача, и делегаты уведомляют вас о завершении процесса. Это просто простой вызов с настройкой 'UIImage'. –

+0

Обычный, я опубликовал способ, которым это работает. Сравните свои классы и посмотрите, какая разница для моей. Его о программировании и его основной проблеме. Это только начало, поэтому научитесь читать код. Вы ничего не узнаете, если у вас уже есть проблема с этим и не можете его сравнить. –

Смежные вопросы