2012-12-21 105 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