2012-02-29 48 views
5

Tôi đang nhận được hình ảnh từ người dùng từ thư viện ảnh và tôi muốn chuyển hình ảnh đó đến một chế độ xem khác ...Chuyển hình ảnh từ một chế độ xem sang một chế độ xem khác

Tôi đã đọc rằng tôi sẽ có thể chỉ đơn giản là làm một cái gì đó như thế này:

secView.imgView.image = selectedImage.image; 

Thiết UIImageView tôi trên quan điểm thứ hai là hình ảnh từ UIImageView tôi ... Nhưng UIImageView trong giao diện thứ hai chỉ là trống rỗng ...

My mã này là ...

.210

ViewController.h:

@interface ViewController : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate> 
{ 
    UIImagePickerController *picker; 
    IBOutlet UIImageView *selectedImage; 

    SecondView *secondView; 
} 

@property (nonatomic, retain) UIImageView *selectedImage; 
@property (nonatomic, retain) SecondView *secondView; 

-(IBAction)sendImage:(id)sender; 
-(IBAction)openGallery:(id)sender; 

@end 

ViewController.m (chỉ những phần liên quan)

-(IBAction)sendImage:(id)sender 
{ 
    if(self.secondView == nil) 
    { 
     SecondView *secView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]]; 

     self.secondView = secView; 

     secView.imgView.image = selectedImage.image; 
    } 

    [self.navigationController pushViewController:secondView animated:YES]; 
} 

-(IBAction)openGallery:(id)sender 
{ 
    picker = [[UIImagePickerController alloc] init]; 

    picker.delegate = self; 

    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 

    [self presentModalViewController:picker animated:YES]; 
} 

-(void)imagePickerControllerDidCancel:(UIImagePickerController *) Picker 
{  
    [Picker dismissModalViewControllerAnimated:YES];  
} 

- (void)imagePickerController:(UIImagePickerController *) Picker 

didFinishPickingMediaWithInfo:(NSDictionary *)info 
{  
    // Save the image 
    selectedImage.image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

    [Picker dismissModalViewControllerAnimated:YES]; 
} 

Trong bài khác tôi đọc rằng cách tiếp cận khác là để làm điều này:

-(IBAction)sendImage:(id)sender 
{ 
    if(self.secondView == nil) 
    { 
     SecondView *secView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]]; 

     self.secondView = secView; 

     [secView setImage:selectedImage.image]; 
    } 

    [self.navigationController pushViewController:secondView animated:YES]; 
} 

và sau đó trong secondview.h

-(void)setImage:(UIImage *)image; 

và .m

-(void)setImage:(UIImage *)image 
{ 
    [imgView setImage:image]; 
} 

Nhưng cả hai cách tiếp cận kết quả trong một UIImageView trống ... Vì vậy, cách tiếp cận đúng để làm điều này là gì?

Cảm ơn trước!

EDIT

SecondView là khá đơn giản vào lúc này ... (trong mã posted tôi cố gắng và làm theo phương pháp hai)

@interface SecondView : UIViewController 
{ 
    UIImageView *imgView; 
} 

@property (nonatomic, retain) IBOutlet UIImageView *imgView; 

-(void)setImage:(UIImage *)image; 

@end 

@implementation SecondView 

@synthesize imgView; 

-(void)setImage:(UIImage *)image 
{ 
    [imgView setImage:image]; 
} 

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

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

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

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

@end 

SOLUTION Được rồi ... Đi lại cho phương pháp đầu tiên và thực hiện một số thay đổi mà cuối cùng đã làm việc ...

-(IBAction)sendImage:(id)sender 
{ 
    if(self.secondView == nil) 
    { 
     SecondView *secView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]]; 

     self.secondView = secView; 

     secView.theImage = selectedImage.image; 
    } 

    [self.navigationController pushViewController:secondView animated:YES]; 
} 

Và trong chế độ xem thứ hai, tôi đã tạo UIImage * theImage - sau đó tôi đặt [imgView setImage: theImage]; trong viewDidLoad, mà làm việc ...

+0

xin vui lòng đặt mã của lớp SecondView – Ganzolo

+0

Nó được thêm giờ :) Nhưng tôi đã cho thấy việc bổ sung duy nhất trong mã ngoài tiêu chuẩn ... (xin lưu ý, các secondView gửi được nơi tôi thử phương pháp thứ hai được đề cập ...) – user969043

+0

Cảm ơn bạn! Việc chuyển UIImage và UIImageView từ trình điều khiển chế độ xem gốc sang secondViewController cũng làm việc cho tôi. Có lẽ vì UIImageView trên secondVC là một IBOutlet nó sẽ không hoạt động. – LevinsonTechnologies

Trả lời

7

này giải quyết vấn đề này:

-(IBAction)sendImage:(id)sender 
{ 
    if(self.secondView == nil) 
    { 
     SecondView *secView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]]; 

     self.secondView = secView; 

     secView.theImage = selectedImage.image; 
    } 

    [self.navigationController pushViewController:secondView animated:YES]; 
} 

SecondView:

@interface SecondView : UIViewController 
{ 
    UIImageView *imgView; 
    UIImage *theImage; 
} 

@property (nonatomic, retain) IBOutlet UIImageView *imgView; 
@property (nonatomic, retain) UIImage *theImage; 

-(void)setImage:(UIImage *)image; 

@end 

và trong .m của secondView:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    [imgView setImage:theImage]; 
} 
0

Tôi nghĩ rằng tôi thấy vấn đề:

Trong secondView lớp học của bạn, UIImageView của bạn không được kết nối với UIImageView đối tượng trong tập tin nib.

Bạn nên có một cái gì đó như thế:

IBOutlet UIImageView *imgView; 

Để kiểm tra xem xem được kết nối một cách chính xác đến Nib bạn có thể làm điều này:

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

Vấn đề của bạn là thú vị xin vui lòng cho tôi biết nếu nó không hoạt động tôi sẽ kiểm tra sâu hơn.

+0

Thực ra, tôi tạo IBOutlet trong @property (nonatomic, retain) IBOutlet UIImageView * imgView; :) Vì vậy, đó không phải là lỗi ... không may :) chỉ để chắc chắn, tôi đã thêm mã để thay đổi backgroundcolor, mà làm việc ... – user969043

+0

Oups Tôi đã không nhìn thấy nó. Tôi sẽ kiểm tra sâu hơn một chút :) – Ganzolo

+0

Bạn có chắc chắn rằng bạn đã chọnImage.image! = Nil? – Ganzolo

0

// Đầu tiên ViewController: - (void) passimage {

Second_ViewController *select_main =[[UIStoryboard storyboardWithName:@"Main" bundle:nil]instantiateViewControllerWithIdentifier:@"Second_ViewController"]; 
    select_main.tt_image=_bg_imageview.image; 
    [[self navigationController] pushViewController:select_main animated:YES]; 

}

// thứ hai ViewController vượt qua UIImage đối tượng:

  • (void) {viewDidLoad

    _bg_imageview.image = _bb_image; }

Các vấn đề liên quan