是否可以在上一页 UITableview中选择一行。 我提供了图像样本,以便更准确地了解正在发生的事情。
http://img186.imageshack.us/img186/933/picture8a.png
http://img405.imageshack.us/img405/9327/picture9d.png
http://img200.imageshack.us/img200/5386/picture10thm.png
在早晨训练屏幕上,可以选择一行并在其后面,以便播放电影。 如果电影播放,您可以按第二个按钮,它将带您进入决赛桌。 如果您按下后退按钮,您将只返回上一个屏幕。
现在我的问题出在这里。 如果我在按下第二个按钮后进入我的最后一个屏幕并按下后退按钮,如果它可以播放上一个视频(换句话说,视频连接到之前选择的单元格),那将会很棒。
因此,如果我可以创建一个函数或某种动作,实际上可以从第一个字段中选择先前选择的行(例如本例中的Lunge Forward)。 也许有些像
previousRow = [ self.tableView indexPathForSelectedRow];
[self tableView:[self tableView] didSelectRowAtIndexPath:previousRow];
在那里做点什么
即使不可能,如果有人让我知道,我也会很感激。
修改 这是播放视频时单元格背后的一些代码
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Get the dictionary of the selected data source.
NSDictionary *dictionary = [self.tableDataSource objectAtIndex:indexPath.row];
//check to see if video must be played
NSString *playVids = [dictionary objectForKey:@"playVids"];
finalscreen = [dictionary objectForKey:@"finalScreen"];
if(playVids == nil )
{
if(CurrentLevel != 0 )
{
if( finalscreen == nil )
{
NSString *movies = [dictionary objectForKey:@"movieID"];
NSURL *movie = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:movies ofType:@"m4v"]];
theMovie = [[MPMoviePlayerController alloc] initWithContentURL:movie];
[theMovie setOrientation:UIDeviceOrientationPortrait animated:NO];
[theMovie setScalingMode:MPMovieScalingModeAspectFit];
theMovie.backgroundColor = [ UIColor whiteColor];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMovieFinishedCallback:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:theMovie];
[theMovie play];
[self getToolBarStuff];
lblTitle.text = [dictionary objectForKey:@"Title"];
[[[UIApplication sharedApplication]keyWindow]addSubview:toolbar2];
[[[UIApplication sharedApplication]keyWindow]addSubview:imageView];
[[UIApplication sharedApplication]keyWindow]addSubview:lblTitle];
}
}
else
{
WebViewController *web = [[WebViewController alloc] initWithNibName:@"WebView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:web animated:YES];
[web release];
}
}
else {
//Prepare to tableview.
rvController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:[NSBundle mainBundle]];
//Increment the Current View
rvController.CurrentLevel += 1;
//Set the title;
rvController.CurrentTitle = [dictionary objectForKey:@"Title"];
//Push the new table view on the stack
[self.navigationController pushViewController:rvController animated:YES];
rvController.tableDataSource = Children;
[rvController release];
}
}
我从字典文件中获取我的信息/提要,并且我的字典中的不同标签告诉我的tableview何时播放视频以及何时不播放(playVids)。
所以确切地说,我有一个开始屏幕,它会带你到第二个屏幕,然后你会看到早上的健身屏幕,如果你点击一个单元格,它将播放(与每个单元格不同)视频。我无法使用苹果的标准设计(带有上面的后退按钮),因为这项任务特别要求使用他们自己的设计。 这就是我创建自己的tabbar和backbutton的原因。
我的backbutton看起来像这样
-(void)back_clicked:(id)sender
{
[self.navigationController popViewControllerAnimated:YES];
CurrentLevel--;
switch( CurrentLevel ) {
case 0;
[toolbar removeFromSuperView];
default:
break;
}
}
所以如果我在最后一个屏幕上,我只是弹出那个屏幕返回我之前的屏幕(早上锻炼)。而实际需要做的是弹出屏幕并播放最后一个视频。我想我可以通过弹出最后一个屏幕然后在早上锻炼中选择之前点击的单元格来做到这一点。
对此有任何想法。
答案 0 :(得分:1)
我不确定我在这里完全理解你的问题。你能展示更多的代码吗?你有3个视图控制器,对吗?您是否使用带推/弹出的标准导航控制器模式从一个到另一个?看起来好像你不是因为按钮是奇怪的布局。
如果您正按下后退按钮,只需弹出视图3并自然返回视图2(它仍然会在那里,所以视频仍然可以播放)所以我不明白为什么你需要捣乱视图1中的表格,以便找到并再次显示。您应该能够挂钩到viewWillAppear并执行与从视图1进行操作时相同的操作。
如果您没有使用标准导航控制器模式,那么这可能就是问题所在。从UI的角度来看,你可能应该这样做 - 人们会期望标题栏中有一个标准的后退按钮。
我很确定你的问题无论如何都是可以解决的 - 例如,你可以在创建它们时将对象引用从一个视图传递到另一个视图 - 但我认为你不需要求助于你想到的方法。
编辑:阅读其他细节我看到你确实使用了push / pop。所以你有一堆视图,当一个视图被弹出时,它会揭开它下面的视图,对吧?因此,应该可以通过在控制器中实现viewWillAppear或viewDidAppear方法来执行您想要的操作。弹出最终屏幕时,如果我理解正确,它将揭开能够播放电影的视图。在这种情况下,viewcontroller将获取viewWillAppear / viewDidAppear消息 - 通过维护状态并接收这些消息,然后您可以实现逻辑来决定是否需要播放电影。而不是调用didSelectRow。方法再次你可以把电影播放的东西放在自己的方法中,这样你就可以从viewDidAppear或didSelectRow调用......
答案 1 :(得分:0)
我也不确定我是否完全理解你的问题,但这听起来与我最近正在处理的问题类似。在详细视图中查看此帖子,使用向上箭头在父表格中移动。我的应用程序基于相同的示例代码,因此您应该能够毫不费力地使用它。
Up/down arrows in nav bar of detail view to page through objects in parent table