2015-09-26 60 views
3

另一个类我有一个IBOutlet在ViewController.swift称为backgroundView使用IBOutlet中从迅速

class ViewController: UIViewController, SideBarDelegate { 

    @IBOutlet weak var backgroundView: UIView! 

而且我想使用IBOutlet中上SideBar.swift

@objc protocol SideBarDelegate{ 
    func sideBarDidSelectButtonAtIndex(index:Int) 
    optional func sideBarWillClose() 
    optional func sideBarWillOpen() 
} 

//When an item of the sidebar is selected, and also when the sidebar will open or close 
class SideBar: NSObject, SideBarTableViewControllerDelegate { 
    func handleSwipe(recognizer:UISwipeGestureRecognizer){ 
     let bgv = ViewController() 
     if recognizer.direction == UISwipeGestureRecognizerDirection.Right { 
      showSideBar(false) 
      delegate?.sideBarWillClose?() 
      let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) 
      let blurView = UIVisualEffectView(effect: blurEffect) 
      blurView.frame = bgv.backgroundView.bounds 
      bgv.backgroundView.addSubview(blurView) 

     } else { 
      showSideBar(true) 
      delegate?.sideBarWillOpen?() 
     } 
    } 

但表示侧时酒吧,背景不模糊。 有什么不对?

+0

我想怎么回事是,你必须确保ViewController是视图控制器iboutlet连接到同一个实例。现在你只是实例化一个没有笔尖或故事板的新的ViewController –

+0

谢谢!我明白了什么是错的:D – Songshil

回答

0

您实际上并未访问该视图控制器的实例。您创建一个新的并将其分配给bgv,然后您修改那个。

您可以通过委托来访问它,但不能通过创建新的视图控制器来访问它。您还必须将其作为变量添加到协议中。

更好的想法是将View Controller应该处理的内容移动到该类,而不是尝试访问该控制器的视图。这完全违背了授权的目的。

let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) 
let blurView = UIVisualEffectView(effect: blurEffect) 
blurView.frame = backgroundView.bounds 
backgroundView.addSubview(blurView) 

所有的代码应该在sideBarWillClose在您的代理(视图控制器的实现,方法)

我也建议不进行这些功能的可选的,因为你会想父控制器能够在菜单打开和关闭时执行操作。另外,清理你的代码一点,更少?的

+1

我知道了 我在类ViewController中做了func sideBarWillClose(),它的工作原理是 非常感谢:) – Songshil

2
class ViewController: UIViewController, SideBarDelegate { 

    @IBOutlet weak var backgroundView: UIView! 

    var sideBar:SideBar = SideBar() 

    override func viewDidLoad() { //show side bar or not 

     sideBar = SideBar(sourceView: self.view, menuItems: ["first item", "second item", "funny item"]) 
     sideBar.delegate = self 
    } 

    func sideBarDidSelectButtonAtIndex(index: Int) { //which menuitem you take 
     if index == 2 { 
      // imageView.backgroundColor = UIColor.redColor() 
      //imageView.image    = nil 
     } else if index == 0 { 
      //imageView.image = UIImage(named: "stars") 
     } 
    } 

    func sideBarWillOpen() { 
     let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light) 
     let blurView = UIVisualEffectView(effect: blurEffect) 
     blurView.frame = backgroundView.bounds 
     backgroundView.addSubview(blurView) 
    } 
}