gpt4 book ai didi

ios - Storyboard只加载一次

转载 作者:行者123 更新时间:2023-11-28 12:40:52 25 4
gpt4 key购买 nike

解释

我正在尝试在单独的 swift 文件中构建一个简单的电子邮件代码(在本例中为:GameViewController.swiftMailViewController.swift)。

应该发生什么:我必须触摸 GameViewController 中的屏幕来调用 MailViewController,当取消或发送电子邮件时,它应该去回到 GameViewController

发生了什么:它调用 MailViewController 并在触摸 CancelSend 时返回,但是 只有一次。当我尝试再次执行此操作时(即使再次关闭和打开应用程序)尝试返回 GameViewController 时出现黑屏。


代码

您可以点击here下载下面的代码.

游戏 View Controller

import UIKit
import SpriteKit

class GameViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

// Set view size.
let scene = GameScene(size: view.bounds.size)

// Configure the view.
let skView = view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true

/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true

/* Set the scale mode to scale to fit the window */
scene.scaleMode = .ResizeFill

skView.presentScene(scene)

//Register mail observer (so I can call from GameScene)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.openMailViewController), name: "openMailViewController", object: nil)
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
return .Landscape
} else {
return .Landscape
}
}
}

extension GameViewController{

func openMailViewController(){
self.performSegueWithIdentifier("openMailViewController", sender: self)
}
}

邮件 View Controller

import UIKit
import SpriteKit
import MessageUI

class MailViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

self.openMailController()
}

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
return .AllButUpsideDown
} else {
return .All
}
}
}

//Mail
extension MailViewController: MFMailComposeViewControllerDelegate {

func openMailController() {

let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self //extremely important to set the mailComposeDelegate property, not the delegate property

self.presentViewController(mailComposerVC, animated: true, completion: nil)
}

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {

//dismiss mail
self.dismissViewControllerAnimated(true, completion: nil)

//go back to the game
backToGameViewController()
}
}

extension MailViewController{

func backToGameViewController(){
self.performSegueWithIdentifier("backToGameViewController", sender: self)
}
}

主 Storyboard

enter image description here


提前致谢,
路易斯。

最佳答案

如果你更换

self.performSegueWithIdentifier("backToGameViewController", sender: self)

self.dismissViewControllerAnimated(真,完成:无)

您的代码可以工作,但我认为这实际上不是您想要做的。

之所以可行,是因为您在游戏 Controller 中展示了 MailViewController,然后它展示了 MFMailComposeViewController。由于您同时呈现两个,因此您会得到一个奇怪的双重动画,其中空白 View 在邮件 View 向上滑动之前向上滑动。为了完全关闭邮件 View ,您需要调用 dismissViewController 两次。

更好的方法是直接从 GameController 呈现 MFMailComposeController。

关于ios - Storyboard只加载一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39420784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com