2016-06-02 3 views
0

Привет, я сейчас застрял в том, что отправляю данные UILabel через один контроллер представления в другой, идущий из ячейки просмотра коллекции. Вот мой текущий код, из которого я не получаю ошибок? Может показаться очевидным для тех, кто знает, что они делают, но мне нужно как-то объявить на втором контроллере представления, что я устанавливаю UILabel из другого VC?Обновление UILabel от другого контроллера просмотра

Вот мой текущий код выглядит следующим образом:

GroupsViewController.m

#import "GroupsViewController.h" 
#import "GroupsHomeViewController.h" 
#import "CustomCell.h" 

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"GroupsHomeSegue" sender:indexPath]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([segue.identifier isEqualToString:@"GroupsHomeSegue"]) 
    { 
     NSIndexPath* indexPath = [[self.GroupsCollectionView indexPathsForSelectedItems]firstObject]; 
     if(indexPath !=nil) 
     { 
      NSString *selectedImage = arrayOfImages [indexPath.item]; //collect image 
      GroupsHomeViewController *groupsHomeVC = segue.destinationViewController; //set D.V.C 
      groupsHomeVC.logoImage = [UIImage imageNamed: selectedImage]; //set image 
      groupsHomeVC.groupLabel.text = arrayOfDescriptions[indexPath.item ]; //set text 

     } 
    } 
} 

GroupsHomeViewController.h

@interface GroupsHomeViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> 

@property (strong, nonatomic) IBOutlet UIImageView *logoImageView; 
@property (strong, nonatomic) UIImage *logoImage; 
@property (strong, nonatomic) IBOutlet UILabel *groupLabel; 
@end 

GroupsHomeViewController.m

#import "GroupsHomeViewController.h" 

@interface GroupsHomeViewController() 

@end 

@implementation GroupsHomeViewController 

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    self.logoImageView.image = self.logoImage; 
} 

Большое спасибо за ваше время и терпение.

+0

действительно ли этот код правильно установлен logoImage на DVC? –

+0

Да, он совершенно не создает изображение, я просто не могу его установить, чтобы установить метку на контроллере дополнительного представления. –

+0

Я предполагаю, что вы подключили свой IBOutlet? –

ответ

1

Потому что на данный момент GroupsHomeViewController еще не загружено в базу данных. По этой причине вы столкнулись с этой проблемой. Вместо прямого передачи значения UILabel, попробуйте передать текст, используя NSString. Объявление

@property (strong,nonatomic) NSString *valueToPass; 

. Затем передать значение в строку, используя ниже код

NSString *selectedImage = arrayOfImages [indexPath.item]; //collect image 
GroupsHomeViewController *groupsHomeVC = segue.destinationViewController; //set D.V.C 
groupsHomeVC.logoImage = [UIImage imageNamed: selectedImage]; //set image 
// pass string to next viewController's NSString object.    
groupsHomeVC.valueToPass = arrayOfDescriptions[indexPath.item ]; 

Тогда в viewDidLoad из GroupsHomeViewController, установите строку на UILabel как этот self.groupLabel.text=self.valueToPass. Попытайтесь это сделать.

+0

Благодарим за помощь –

+0

Можно ли использовать одну и ту же строку и установить ее как заголовок контроллера вида на верхней панели? –

+0

Да, вы можете просто передать эту строку в качестве заголовка навигационной панели. –

1

Первое в GroupsHomeViewController.h создать одно свойство, как

@property (nonatomic, strong)NSString *descriptionName; 

затем обновить метод

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([segue.identifier isEqualToString:@"GroupsHomeSegue"]) 
    { 
     NSIndexPath* indexPath = [[self.GroupsCollectionView indexPathsForSelectedItems]firstObject]; 
     if(indexPath !=nil) 
     { 
      NSString *selectedImage = arrayOfImages [indexPath.item]; //collect image 
      GroupsHomeViewController *groupsHomeVC = segue.destinationViewController; //set D.V.C 
      groupsHomeVC.logoImage = [UIImage imageNamed: selectedImage]; //set image 
      groupsHomeVC.descriptionName = arrayOfDescriptions[indexPath.item ]; //set text 

     } 
    } 
} 

Сейчас в GroupsHomeViewController.m обновить этот

#import "GroupsHomeViewController.h" 

@interface GroupsHomeViewController() 

@end 

@implementation GroupsHomeViewController 
@synthesize descriptionName; 
-(void)viewDidLoad{ 
    [super viewDidLoad]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self. groupLabel.text = descriptionName; 
} 

Это, безусловно, Помогите. В вашем случае текст присваивается метке, но когда вы переходите к жизненным циклам, вызываются вызовы GroupsHomeViewController. Итак, ваш UILabel инициализируется, и вы устанавливаете текст перед ним, чтобы он не отображал его.

Создание свойства NSString, несомненно, поможет вам.

+0

Благодарим за помощь. –

+0

Средства для вас. Правильно ? – Pushkraj

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