难以理解 uiviewcontrollers 传递数据和更改视图
Posted
技术标签:
【中文标题】难以理解 uiviewcontrollers 传递数据和更改视图【英文标题】:Trouble with understanding uiviewcontrollers passing data and changing views 【发布时间】:2016-05-18 17:43:47 【问题描述】:我在传递一些数据时遇到了一些麻烦 (静态int)视图之间,我很确定这是因为我没有正确更改视图,但不确定我做错了什么。 (并且之前没有使用过故事板,而且对这些东西还很陌生)
例如,从 主菜单 导航我加载 TableViewController_LevelViewTable : UITableViewController
TableViewController_LevelViewTable 显示游戏的所有关卡,当我点击一个 cel 时,它应该在 Data 类中设置静态 int 值(与关卡相关加载和一个字符串)稍后由 HelloSKScene 读取 然后将 helloSkscene 加载到 myViewControllerToSKScene
if (indexPath.row ==1)
UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
//Load view controller: myViewController <loads SKScene>
myViewControllerToSKScene *tvc=[storyboard instantiateViewControllerWithIdentifier:@"myViewControllerToSKScene"];
[self.view addSubview:tvc.view];
[self addChildViewController:tvc];
[Data setLevel:1];
这又会加载 myViewControllerToSKScene : UIViewController
myViewControllerToSKScene
- (void)viewDidLoad
// Create and configure the SKScene to load.
HelloSKScene *theScene = [HelloSKScene sceneWithSize:spriteView.bounds.size];
theScene.scaleMode = SKSceneScaleModeAspectFill;
// Present the scene.
[spriteView presentScene:theScene];
视图正在加载,但数据最初并未加载,但会在第二次加载。是不是我从 SKScene 返回到菜单然后返回到 skscene 不知何故,静态 int 在视图之间不起作用
我还注意到 tableview 仍然位于 HelloSkScene 视图后面(我将如何删除 tableview 只保留屏幕上的 SKScene,所有场景都应该删除前一个场景)
感谢 否
在整个故事板下方,我正在测试 tableview 的嵌入、加载 tableview 控制器并将 SKScene 加载到 UIView
【问题讨论】:
【参考方案1】:你正在做的是向当前控制器添加一个子视图,你可能想使用-presentViewController:animated:completion:
,像这样:
UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
myViewControllerToSKScene *tvc = [storyboard instantiateViewControllerWithIdentifier:@"myViewControllerToSKScene"];
//perhaps you want to add your level configuration here
tvc.level = indexPath.row //or just tvc.level = 1;
[self presentViewController:myViewControllerToSKScene animated:YES completition:nil];
here 中的更多信息
您在创建视图后设置 Data
对象,这就是为什么第一次不加载,但第二次加载,如果以前的解决方案不适合您,并且您仍然想使用Data
对象,你可以实现这样的:
UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
myViewControllerToSKScene *tvc = [storyboard instantiateViewControllerWithIdentifier:@"myViewControllerToSKScene"];
[Data setLevel:1];
[self presentViewController:myViewControllerToSKScene animated:YES completition:nil];
【讨论】:
以上是关于难以理解 uiviewcontrollers 传递数据和更改视图的主要内容,如果未能解决你的问题,请参考以下文章
将数据从 UIViewController 传递到 UIView
将数据从 UITableView 传递到 UIViewController
将数据从 UIViewControllerRepresentable 传递给 UIViewController