【问题标题】:Call delegate without segues or actually adding the view on storyboard在没有 segues 的情况下调用委托或在情节提要上实际添加视图
【发布时间】:2018-05-07 00:55:32
【问题描述】:

我是 swift 新手,我很困惑如何将值从容器视图传递到父视图。我尝试了委托方法,但我不知道如何在父级内部调用委托方法。它似乎不起作用,应用程序刚刚终止。

以下代码是如何显示容器。CameraView是容器视图,DiaryEntryViewController是父视图控制器。

@IBAction func cameraBtn(_ sender: Any) {
    CameraView.isHidden = !CameraView.isHidden
    self.view.sendSubview(toBack: diaryEntryText) 
}

点击另一个按钮,容器应该隐藏并同时将数据传递给父视图。我可以通过以下代码隐藏视图:

@IBAction func saveCamBtn(_ sender: Any) {
  let parent = self.parent as! DiaryEntryViewController
  parent.CameraView.isHidden  = true
}

有没有办法将数据获取到父视图。我实际上不想使用 segues,因为如果我再次打开容器视图,视图内的数据不应该丢失。

【问题讨论】:

    标签: uicontainerview swift3.2


    【解决方案1】:
    Here is an example, the Player class delegates the shooting logic to the weapon:
    
    protocol Targetable {
        var life: Int { get set }
        func takeDamage(damage: Int)
    }
    
    protocol Shootable {
        func shoot(target: Targetable)
    }
    
    class Pistol: Shootable {
        func shoot(target: Targetable) {
            target.takeDamage(1)
        }
    }
    
    class Shotgun: Shootable {
        func shoot(target: Targetable) {
            target.takeDamage(5)
        }
    }
    
    class Enemy: Targetable {
        var life: Int = 10
    
        func takeDamage(damage: Int) {
            life -= damage
            println("enemy lost \(damage) hit points")
    
            if life <= 0 {
                println("enemy is dead now")
            }
        }
    }
    
    class Player {
        var weapon: Shootable!
    
        init(weapon: Shootable) {
            self.weapon = weapon
        }
    
        func shoot(target: Targetable) {
            weapon.shoot(target)
        }
    }
    
    var terminator = Player(weapon: Pistol())
    
    var enemy = Enemy()
    
    terminator.shoot(enemy)
    //> enemy lost 1 hit points
    terminator.shoot(enemy)
    //> enemy lost 1 hit points
    terminator.shoot(enemy)
    //> enemy lost 1 hit points
    terminator.shoot(enemy)
    //> enemy lost 1 hit points
    terminator.shoot(enemy)
    //> enemy lost 1 hit points
    
    // changing weapon because the pistol is inefficient
    terminator.weapon = Shotgun()
    
    terminator.shoot(enemy)
    //> enemy lost 5 hit points
    //> enemy is dead now
    

    另外你可以参考这个链接:https://medium.com/@jamesrochabrun/implementing-delegates-in-swift-step-by-step-d3211cbac3ef

    【讨论】:

    • 感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 其长期价值,通过展示为什么这是解决问题的好方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2016-12-13
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多