从UICollectionView

时间:2015-12-16 15:24:46

标签: ios objective-c uitableview uicollectionview

我有一个简单的应用程序,其中包含UITabBarController和4个选项卡。在第一个标签上,我有一个UITableViewController,其中包含一个静态语言列表(在Interface Builder中设计)。此UITableViewController称为Videos。我还有LanguagesFromVideos UITableViewController,它也是Interface Builder设计的。这是一个动态的UITableView

如果用户点击了第一个单元格,它们将被带到Videos UITableView LanguagesFromVideos中,并且将填充该语言的数据,如果用户点击了第二个单元格,它将填充来自该语言的数据。我Videos Interface Builder的每行有一个segue。

我正在更改设计,以便“视频”标签现在为UICollectionViewController而不是UITableViewController

我在Interface Builder中设计了一个单个单元格,其中所有cells都是使用NSArray从代码中动态填充的。

问题

我现在面临的问题是,从UICollectionViewLanguagesFromVideo的单元格中,segue无法正常发生。如果我点击中文,它应该在LanguagesFromVideo UITableView中显示中文信息,如果我点击英文,它应该在LanguagesFromVideo中显示,等等。

我在这里没有看到任何理想的结果。我点击中文并加载视图,但视图为空白。

推动segue非常重要。

在我的UICollectionViewCell didSelectItemAtIndexPath中,我有:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{

    VideosTabCollectionCell *videosTabCell = (VideosTabCollectionCell *)[collectionView cellForItemAtIndexPath:indexPath];

    if ([videosTabCell.videosTabCellLabel.text isEqualToString:@"Chinese\n汉语"])
    {
        LanguageFromVideoTabTableViewController *lfvtvc = [[LanguageFromVideoTabTableViewController alloc] init];
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Chinese Videos" ofType:@"txt"];
        NSString *testString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
        NSArray *listOfVideos = [testString componentsSeparatedByString:@"\n"];
        NSMutableArray *availableVideosToPass = [listOfVideos mutableCopy];

        NSString *theSelectedLanguage = @"Chinese - 汉语";

//        [self presentViewController:lfvtvc animated:YES completion:nil];

        [lfvtvc setAvailableVideos:availableVideosToPass];
        [lfvtvc setSelectedLanguage:theSelectedLanguage];

    }

}

以前,LanguagesFromVideo UITableView已填充使用文本文件等。该部分没有任何变化。我仍然需要从中文UICollectionViewCell转到LanguagesFromVideo,显示中文信息和其他语言相同。

这不起作用,我完全坚持这个。我注意到prepareForSegue上没有UICollectionView方法。

更新

我已在push segueInterface Builder创建Videos UICollectionView LanguagesFromVideo UITableView并将其称为languagesFromVideoSeguedidSelectItemAtIndexPath。在[self performSegueWithIdentifier:@"languagesFromVideoSegue" sender:self]; 中,我尝试了:

LanguagesFromVideo

这导致了一个空白视图控制器的segue。我猜它没有加载didSelectItemAtIndexPath我在- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"languagesFromVideoSegue"]) { LanguageFromVideoTabTableViewController *lfvtvc = (LanguageFromVideoTabTableViewController*)segue.destinationViewController; // Here, I will create the text file with a list of languages. The text file // already exists and we are passing it in here, with the creation of a NSArray // and then creating a copy for an NSMutableArray to pass. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Chinese Videos" ofType:@"txt"]; NSString *testString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil]; NSArray *listOfVideos = [testString componentsSeparatedByString:@"\n"]; NSMutableArray *availableVideosToPass = [listOfVideos mutableCopy]; NSString *theSelectedLanguage = @"Chinese - 汉语"; [self performSegueWithIdentifier:@"languagesFromVideoSegue" sender:@"Chinese"]; // [self presentViewController:lfvtvc animated:YES completion:nil]; [segue destinationViewController]; [lfvtvc setAvailableVideos:availableVideosToPass]; [lfvtvc setSelectedLanguage:theSelectedLanguage]; } } 中提供的内容。

更新2

尝试使用prepareForSegue而不是didSelectItemAtIndexPath,我有:

segue

这样,segue根本不会发生。

更新3

我已在Interface Builder中设置UICollectionViewCell来自View Controller本身,而不是didSelectItemAtIndexPath。现在在prepareForSegue(不使用 [self performSegueWithIdentifier:@"languagesFromVideoSegue" sender:self]; ),我正在运行上面看到的代码,但添加了:

segue

self.selectedLanguages发生了,但它是空白的,因为LanguagesFromVideoComputerOrder为零(在传递之前它不是零)。

对此的任何想法都会非常感激。

1 个答案:

答案 0 :(得分:1)

您可以使用

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

如果您在故事板中将segue添加为集合中的push segue。在这种情况下,所选单元格将是发件人 如果您在 didSelectRowAtIndexPath 中以编程方式启动segue,则可以将您想要的任何内容传递给发件人。

比使用prepareForSegue设置数据:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    [super prepareForSegue:segue sender:sender];

    if ([sender isKindOfClass:[UITableViewCell class]])
    {
        UITableViewCell *cell = sender;
        // now you can set your data.
    }
}