我有一个简单的应用程序,其中包含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
从代码中动态填充的。
问题
我现在面临的问题是,从UICollectionView
到LanguagesFromVideo
的单元格中,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 segue
中Interface Builder
创建Videos UICollectionView
LanguagesFromVideo UITableView
并将其称为languagesFromVideoSegue
。didSelectItemAtIndexPath
。在[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
发生了,但它是空白的,因为LanguagesFromVideo
中ComputerOrder
为零(在传递之前它不是零)。
对此的任何想法都会非常感激。
答案 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.
}
}