代码之家  ›  专栏  ›  技术社区  ›  Adam

swift popviewcontroller发送数据

  •  0
  • Adam  · 技术社区  · 6 年前
    class SelectTag: UIViewController {
        var selectedTag = [0,1,2]
    
        @IBAction func endSelectTag(_ sender: Any) {
    
            self.navigationController?.popViewController(animated: true)
        }
    }
    

    我可以在运行popviewcontroller之前添加数据吗?

    我试过这个

    (self.parent as! MyPage).seleteTag = seletedTag
    
    Could not cast value of type UINavigationController to MyPage
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Sweeper    6 年前

    你好像想从 SelectTag MyPage .

    一种方法是使用委托模式。

    创建 SelectTagDelegate :

    protocol SelectTagDelegate : class {
        func didSelectTag(tags: [Int])
    }
    

    将此属性添加到 选择标记 :

    weak var delegate: SelectTagDelegate?
    

    然后改变 endSelectTag 到:

    @IBAction func endSelectTag(_ sender: Any) {
        delegate?.didSelectTag(tags: selectedTag)
        self.navigationController?.popViewController(animated: true)
    }
    

    制作 迈帕奇 符合 选择标记委托 通过实施 didSelectTag :

    extension MyPage: SelectTagDelegate {
        func didSelectTag(tags: [Int]) {
            seleteTag = tags
        }
    }
    

    现在,当你展示 选择标记 ,集合 self 作为代表。

    let selectTag = // get VC from storyboard or use segue.destination depending on your situation
    selectTag.delegate = self
    // present the VC
    
        2
  •  0
  •   ManuRaphy    6 年前
    protocol SelectTagDelegate : Nsobject {
    func clickedTag(tag: Int)
    }
    
    class SelectTag: UIViewController {
    var selectedTag = [0,1,2]
    var delegate : SelectTagDelegate?
    @IBAction func endSelectTag(_ sender: Any) {
         self.delegate.clickedtag(selectedtag)
    
        self.navigationController?.popViewController(animated: true)
    }
    }
    

    现在,当您创建selecttag对象时,将其委托分配给self并实现clickedtag方法。