uicollectionview单元格选择时,uiLabel在另一个viewcontroller中不会更新

时间:2013-07-11 22:47:27

标签: ios uicollectionview

我在视图控制器中放置了一个UIcollectionview(成功运行)。 我想打开另一个viewcontroller并使用选定的单元格文本更新此vc中的标签。 我正在使用以下代码,但它不起作用(不更新其他vc中的标签):

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
// gorseldetay is another viewcontroller including a label and an image
NSLog(@"Row : %d , Section : %d", indexPath.row, indexPath.section);

[self performSegueWithIdentifier:@"showDetail" sender:self];
gorselDetay *g = [self.storyboard instantiateViewControllerWithIdentifier:@"gorselDetay"];
NSLog(@"%@",g.mylabel2.text); // returns "null"
g.mylabel2.text = @"any text to update";
NSLog(@"%@", g.mylabel2.text); // returns "null"
}

我还添加了prepareForSegue操作

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"%@", segue.identifier); // returns "showDetail", OK

 if ([[segue identifier] isEqualToString:@"showDetail"])
{
    UIImage *imageim2 = [UIImage imageNamed:@"anyimage.png"]; //this file exists

    gorselDetay *r1 = (gorselDetay * )[segue destinationViewController];
    [r1.mylabel2 setText:@"any text to update"];
    r1.gorselim.image = imageim2;
    NSLog(@"2 - %@", r1.mylabel2.text); // returns "null"
}
}

如上所述,UICollectionView已成功填充并正常工作,但另一个viewcontroller(名为gorselDetay)中的标签未更新。但是gorselDetay vc顺便打开了。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您无法以这种方式从另一个控制器更新标签(或其他UI元素),因为其视图尚未加载(r1.myLabel2将为null)。您需要将文本传递给r1中的字符串属性,然后在r1的viewDidLoad中使用该属性设置标签的文本。