2012-12-21 107 views
0

我有一个prepareforsegue方法,拍摄一张照片并在不同的视图控制器上显示它。所以我需要在图片显示的同时在第二个控制器上设置一个标签,稍后我会在该标签上做一个随机的字母生成器,但现在我只需要设置标签。我试图把它放在prepareforsegue方法中,但它给了我一个错误。这里是我的所有代码:Prepareforsegue设置标签

//ViewController.m 

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
     if([segue.identifier isEqualToString:@"CameraSegue"] || [segue.identifier isEqualToString:@"LibrarySegue"]) 
     { 

      UIImagePickerController *controller = [segue destinationViewController]; 
      controller.sourceType = [segue.identifier isEqualToString:@"LibrarySegue"] ? UIImagePickerControllerSourceTypePhotoLibrary : UIImagePickerControllerSourceTypeCamera; 
      controller.delegate = self; 


     } 
     else if([segue.identifier isEqualToString:@"ShowImageViewController"]){ 

      UIImage *image = (UIImage*)sender; 
      ShowImageViewController *viewController = segue.destinationViewController; 
      viewController.pickedImage = image; 

      UILabel *label = (UILabel *) sender; 
      ShowImageViewController *vc = segue.destinationViewController; 
      vc.cap = label; 
      //I tried to set the label here 
      label.text = @"Hello"; 

     } 
    } 

    -(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ 
     [self dismissViewControllerAnimated:YES completion:nil]; 
    } 

    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ 
     UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
     [self dismissViewControllerAnimated:YES completion:^{ 
      picker.delegate = nil; 
      [self performSegueWithIdentifier:@"ShowImageViewController" sender:image]; 
     }]; 
    } 

//SeconViewController.h 
@property(nonatomic, strong) UIImage *pickedImage; 
@property (weak, nonatomic) IBOutlet UIImageView *pickedImageView; 
@property(nonatomic, retain) IBOutlet UILabel *cap; 

//SecondViewController.m 

-(void)viewWillAppear:(BOOL)animated{ 
    self.pickedImageView.image = self.pickedImage; 
} 
+0

什么是你的错误?你声明了两个'ShowImageViewController'实例'viewController'和'vc'其中之一就够了,放这行'label.text = @“Hello”;''在'vc.cap = label;' –

+0

这是SIGABRT错误,它也没有工作..我试着约翰说,现在没有错误,但仍然没有显示标签 – emiliomarin

回答

0

你铸造sender两个非常不同的事情。

UIImage *image = (UIImage*)sender; 
ShowImageViewController *viewController = segue.destinationViewController; 
viewController.pickedImage = image; 

UILabel *label = (UILabel *) sender; 
ShowImageViewController *vc = segue.destinationViewController; 
vc.cap = label; 
label.text = @"Hello"; 

您不能将UIImage转换为UILabel并期望事情顺利进行。在prepareForSegue中,您沿图像发送,而不是标签。

可你只需要改变底部四行:

viewController.cap.text = @"Hello"; 

在这种情况下,另一种选择是在ShowImageViewController像你一样的图像来定义一个新的属性。

//SecondViewController.h 
@property(nonatomic, strong) UIImage *pickedImage; 
@property (weak, nonatomic) IBOutlet UIImageView *pickedImageView; 
@property(nonatomic, retain) IBOutlet UILabel *cap; 
@property (nonatomic, strong) NSString pickedLabel; //New property 

-(void)viewWillAppear:(BOOL)animated{ 
    self.pickedImageView.image = self.pickedImage; 
    self.cap.text = self.pickedLabel; 
} 

然后在prepareForSegue

UIImage *image = (UIImage*)sender; 
ShowImageViewController *viewController = segue.destinationViewController; 
viewController.pickedImage = image; 
viewController.pickedLabel = @"Hello"; 
+0

我只是试过了,它没有给我错误,但它没有显示标签..任何想法?还有其他方法可以做到吗? – emiliomarin

+0

是否在'ShowImageViewController'的任何视图事件处理程序中设置了cap或cap.text?即你是否在'viewDidLoad'中初始化'cap'?如果你将它设置在'ShowImageViewController'本身中,该标签会显示出来吗? – John

+1

在'ShowImageViewController'中创建一个属性(NSString)可能更好,该属性被分配给这些处理程序之一中的标签,并在'prepareForSegue'中设置该属性,而不是IBOutlet。 IBOutlet连接与其他加载过程似乎是异步的(至少在我的经验中),所以在那个时候它可能是'nil'。 – John