我已按照此处的说明进行操作,但仍不确定这部分内容:
modalVC.delegate=self;
self.presentViewController(modalVC, animated: true, completion: nil)
我曾尝试以编程方式实例化视图控制器,但仍然无济于事。
这是我退出模态视图控制器时的代码:
@IBAction func dismissViewController(_ sender: UIBarButtonItem) {
self.dismiss(animated: true) {
//
}
}
我正在使用情节提要通过模式视图进行筛选。
这是我希望传输回父视图控制器的数据:
var typeState = "top"
var categoryState = "casual"
这是两个字符串值。
编辑:
我试图从模态视图控制器传递数据,如下所示:
@IBAction func dismissViewController(_ sender: UIBarButtonItem) {
self.dismiss(animated: true, completion: nil)
delegate?.sendValue(value: "success")
if let presenter = presentingViewController as? OOTDListViewController {
presenter.receivedValue = "test"
}
}
而在父视图控制器上,我这样做的是:
func sendValue(value: NSString) {
receivedValue = value as String
}
@IBAction func printReceivedValue(_ sender: UIButton) {
print(receivedValue)
}
当我按下打印按钮时,我仍然无法获得任何价值。
模态视图控制器:
protocol ModalViewControllerDelegate
{
func sendData(typeState: String, categoryState: String)
}
var delegate:ModalViewControllerDelegate!
var typeState = "top"
var categoryState = "casual"
@IBAction func dismissViewController(_ sender: UIBarButtonItem) {
self.dismiss(animated: true, completion: nil)
delegate?.sendData(typeState: typeState as String, categoryState: categoryState as String)
}
父视图控制器:
class parentViewController: UICollectionViewController, ModalViewControllerDelegate {
var typeState: String?
var categoryState: String?
func sendData(typeState: String, categoryState: String) {
self.typeState = typeState as String
self.categoryState = categoryState as String
}
@IBAction func printReceivedValue(_ sender: UIButton) {
print(typeState)
}
编辑:
这是我不使用委托方法的新代码:
模态视图控制器:
@IBAction func dismissViewController(_ sender: UIBarButtonItem) {
self.dismiss(animated: true, completion: nil)
if let presenter = presentingViewController as? OOTDListViewController {
presenter.typeState = typeState
presenter.categoryState = categoryState
}
}
OOTDListViewController:
@IBAction func presentModalView(_ sender: UIBarButtonItem) {
let modalView = storyboard?.instantiateViewController(withIdentifier: "filterViewController") as! ModalViewController
let navModalView: UINavigationController = UINavigationController(rootViewController: modalView)
self.present(navModalView, animated: true, completion: nil)
}
@IBAction func printValue(_ sender: UIButton) {
print(typeState)
print(categoryState)
}
根据要传递的数据,您可以在呈现视图控制器中创建一个属性,可以在关闭模式视图控制器时进行设置,从而可以省去委托。
例如,您有一个ContactsViewController
,持有一个var contacts: [Contact] = []
属性。当您要创建一个新的联系人时,您将提供一个模态视图控制器,该控制器具有创建新Contact
对象所需的不同值。完成并希望关闭视图控制器后,可以像在代码中一样调用该函数,但在中设置属性ContactsViewController
。它看起来像这样:
@IBAction func dismissViewController(_ sender: UIBarButtonItem) {
if let presenter = presentingViewController as? ContactsViewController {
presenter.contacts.append(newContact)
}
dismiss(animated: true, completion: nil)
}
编辑:
如果你 不 希望使用一个委托,这是你如何去做:
在您的OOTDListViewController
:
var testValue: String = ""
@IBAction func printReceivedValue(_ sender: UIButton) {
print(testValue)
}
在您的模态视图控制器中(我称它为PresentedViewController
):
@IBAction func dismissViewController(_ sender: UIBarButtonItem) {
// if your OOTDListViewController is part of a UINavigationController stack, this check will probably fail.
// you need to put a breakpoint here and check if the presentingViewController is actually a UINavigationController.
// in that case, you will need to access the viewControllers variable and find your OOTDListViewController
if let presenter = presentingViewController as? OOTDListViewController {
presenter.testValue = "Test"
}
dismiss(animated: true, completion: nil)
}
如果 要 使用委托,请执行以下操作:
在您的OOTDListViewController中:
protocol ModalDelegate {
func changeValue(value: String)
}
class OOTDListViewController: ModalDelegate {
var testValue: String = ""
@IBAction func presentViewController() {
// here, you either create a new instance of the ViewController by initializing it, or you instantiate it using a storyboard.
// for simplicity, I'll use the first way
// in any case, you cannot use a storyboard segue directly, bevause you need access to the reference of the presentedViewController object
let presentedVC = PresentedViewController()
presentedVC.delegate = self
present(presentedVC, animated: true, completion: nil)
}
func changeValue(value: String) {
testValue = value
print(testValue)
}
}
在您的PresentedViewController
:
class PresentedViewController {
var delegate: ModalDelegate?
var testValue: String = ""
@IBAction func dismissViewController(_ sender: UIBarButtonItem) {
if let delegate = self.delegate {
delegate.changeValue(testValue)
}
dismiss(animated: true, completion: nil)
}
}
问题内容: 我正在使用此应用程序,我需要所有视图控制器,但一个需要纵向显示。我特别需要一个单一的视图控制器,使其能够旋转至手机所处的方向。 为此,我以模态形式呈现(未嵌入NavigationController中) 所以(例如)我的结构是这样的: 窗口-肖像 根视图控制器(UINavigationController-肖像) 家庭视图控制器(UIViewController-肖像) 详细信息视图控
我有一个,它嵌入到另一个中。在这个子视图控制器中,有两个s允许用户输入一些数据。 如何将嵌入视图控制器中输入的数据传回父视图控制器? 我试图使用此方法获取对子视图控制器中文本字段的引用,但出现错误。 此是嵌入的中的之一。我得到以下错误, “AnyObject”没有名为“usernameTextField”的成员 这是做到这一点的最佳方式吗?或者还有其他途径可以实现这一点吗? 非常感谢。
问题内容: 我正在使用SpriteKit制作游戏。我有3个viewControllers:选择级别vc,游戏vc和win vc。游戏结束后,我想显示Win vc,然后如果我按Win vc上的“确定”按钮,我想关闭Win vc和游戏vc(将两个视图控制器弹出堆栈)。但我不知道该怎么办,因为如果我打电话 Win vc(堆栈顶部)被关闭了,所以我不知道在哪里再次调用它来关闭游戏vc。有什么方法可以在不使
在我们讨论数据库和数据模型之前,让我们先讨论一下如何将数据从控制器传递给视图。控制器类将响应请求来的URL。控制器类是给您写代码来处理传入请求的地方,并从数据库中检索数据,并最终决定什么类型的返回结果会发送回浏览器。视图模板可以被控制器用来产生格式化过的HTML从而返回给浏览器。 控制器负责给任何数据或者对象提供一个必需的视图模板,用这个视图模板来Render返回给浏览器的HTML。最佳做法是:一
我对中的有一个问题。 下面是我的代码: 问题:在中按下时,会像它应该的那样消失,取而代之。但是,并不会消失,而是停留在视图B的顶部。 当更改为时,如何强制关闭?请注意,也可以由以外的其他视图更改,因此只将传递给并在单击时将其设置为false并不能完成此工作。
我需要修改我的代码,使它成为一个模型-视图-控制器。因为我是一个完全的编程新手,如果我诚实的话,我会头疼。任何帮助如何做到这一点将不胜感激。 *在一个牧场上有200只忙碌的绵羊。这群羊由95只白羊、60只黑羊和45只白黑羊组成。牧羊人现在想把它们分开,这样相应的羊毛就可以按颜色剪了。帮他写一个小脚本,这样他就可以更好地点他的羊了。请使用变量、数组、数学运算符和函数实现前三点。提示:为了更好地概述,