难以理解 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

从 UIViewController 传递 NSArray

在 UIView 和 UIViewController 之间传递数据

为啥我们将 UIViewController 传递给 UINavigationController 类?