Swift 4 Delegate 不适用于 childViewController

扬·科布利什卡

我必须编写简单的程序。只有一个登录屏幕等待一些密码,并在设置正确的密码后,将屏幕更改为“程序本身”及其功能。我决定通过容器视图及其子视图来完成。一切正常,但应负责触发此更改的委托没有响应。在我尝试过的任何选项中,都没有改变……它仍然没有响应。

这是 ViewController (main) 的代码:

import Cocoa

class ViewController: NSViewController {

        @IBOutlet weak var container: NSView!

        var vc1 : ViewController1 = ViewController1()
        var vc2 : ViewController2 = ViewController2()

        override func viewDidLoad() {
            super.viewDidLoad()

            //initialise of delegate:
            vc1.delegate = self

            // set subviews:
            vc1 = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil).instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "ViewController1")) as! ViewController1
            vc2 = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil).instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "ViewController2")) as! ViewController2
            self.addChildViewController(vc1)
            self.addChildViewController(vc2)

            // set first view:
            vc1.view.frame = self.container.bounds
            self.container.addSubview(vc1.view)
        }

        func changeViews()
        {
            for sView in self.container.subviews {
                sView.removeFromSuperview()
            }

            // set second view:
            vc2.view.frame = self.container.bounds
            self.container.addSubview(vc2.view)
        }
    }

    extension ViewController: ViewController1_Delegate {
        func passwdEntered(_ correctPasswd: Bool) {
            if correctPasswd == true{
                changeViews()
            }
        }
    }

这是第一个(子视图)ViewController 代码,我在其中输入密码:

import Cocoa

protocol ViewController1_Delegate: class {
    func passwdEntered(_ correctPasswd: Bool)
}

class ViewController1: NSViewController{

    @IBOutlet weak var passwordField: PasswordField!

    weak var delegate: ViewController1_Delegate?

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func passwordFIeldEdited(_ sender: PasswordField) {
        delegate?.passwdEntered(true/*for testing purpose always true*/)
    }
}

最后第二个(子视图)ViewController 代码:

import Cocoa

class ViewController2: NSViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

    }

}

我做错了什么?

哑光

首先你说:

var vc1 : ViewController1 = ViewController1()
override func viewDidLoad() {
    super.viewDidLoad()
    vc1.delegate = self

那你这样说:

    vc1 = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), 
                       bundle: nil).instantiateController(
                           withIdentifier: NSStoryboard.SceneIdentifier(
                               rawValue: "ViewController1")) as! ViewController1

因此,您将自己设置为 ViewController1 实例上的委托,但是在下一行中,您丢弃了该 ViewController1 并将其替换为另一个!

设置 的实际值后,将线v1.delegate = self向下移动vc1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

蒸气不适用于xcode 9和swift 4

Swift 4 委托不适用于标签栏控制器

Swift 4包含方法不适用于诸如“ as”之类的简短单词

Swift 4编程语言,inout参数不适用于FunctionType作为Paramter

时间格式(hh:mm a)在Swift 4中不适用于iOS 11.1.1

NSKeyedUnarchiver不适用于Swift 3

Swift If语句不适用于UILabel

数组追加不适用于Swift

NSPredicate 不适用于 Swift (CoreData)

当嵌入到 NavigationController swift4 时,从 UIPageViewController 更新 ChildViewController

或条件不适用于滑轨4

Datepicker 不适用于 bootstrap 4

适用于 iOS 的 Spring RestTemplate (Swift 4)

Firebase OTP 仅适用于某些设备 - Swift 4

中缀 % 运算符适用于 Playground,但不适用于包含的 Swift 库

SwiftChart库不适用于Swift 3.0

Swift Button.setText不适用于渐变

Sqlite.swift不适用于Xcode 7.3

Swift NSNotification不适用于所有ViewController

Swift dynamicType不适用于泛型函数

UIButton不适用于自定义UITableViewCell(Swift)

UICollectionViewFlowLayout minimumLineSpacing不适用于整个集合视图-Swift

Swift:addGestureRecognizer不适用于StackView子级

dosRelativeDateFormatting 不适用于 swift 的未来日期

30 分钟后延迟不适用于 Swift

swift coredata 查询不适用于今天的日期

am4charts 不适用于时间变量,但它适用于 autoid 变量

dplyr :: failwith不适用于lme4 :: lmer,但适用于lm

模式内部的按钮不适用于Bootstrap 4,但适用于Bootstrap 3