以编程方式快速查看

时间:2014-07-02 15:38:08

标签: ios xcode swift

我正在尝试在我的应用程序中执行以下操作:我创建了一个名为“blur.swift”的文件,此文件具有模糊视图上方的代码,以便通过那里的所有内容变得“模糊”。我已将此文件作为Interface Builder中的一个视图。它工作得很完美,除了一个细节:我不能通过IB在接收模糊的sae区域放置一个按钮,因为按钮也变得模糊并且不起作用,我需要在那里插入这个按钮因为那是按钮用户将按此按钮返回上一个屏幕...所以我决定以编程方式在具有模糊效果的代码的同一文件中插入按钮,现在它工作了!模糊就在那里,按钮也是!

我无法解决的问题是如何使这个按钮真正起作用,我尝试使用“performSegueWithIdentifier”,但我确定我在这里遗漏了一些东西,因为它简单不起作用!所以我决定在这里寻求帮助,下面是我的“blur.swift”文件中的完整代码。

只是为了让事情变得更清楚:带有标识符“back”的segue从具有“blur.swift”类的视图转到我想在用户按下按钮时打开的视图控制器(名为giraanam)。


@IBDesignable

class blur: UIView {

    override func layoutSubviews() {

        super.layoutSubviews()


        // Insert blur effect
        var blur:UIBlurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
        var effectView:UIVisualEffectView = UIVisualEffectView (effect: blur)
        effectView.frame = CGRectMake(0,0,320,69)
        self.addSubview(effectView)

        ///Insert the button
        let button   = UIButton.buttonWithType(UIButtonType.System) as UIButton
        button.frame = CGRectMake(20, 25, 34, 34)
        button.setBackgroundImage(UIImage(named:"Back_Resultados.png"),forState: UIControlState.Normal)
        button.performSegueWithIdentifier("back", sender: self)
        self.addSubview(button)


    }

}

谢谢大家!

1 个答案:

答案 0 :(得分:0)

你知道layoutSubviews被频繁调用吗?每次调用layoutSubviews时,您使用的代码都会尝试调用performSegueWithIdentifier。您想要创建一次按钮并向按钮添加目标 - 如下所示:

class blur: UIView {

    var button: UIButton?

    override func layoutSubviews() {

        super.layoutSubviews()

        // Insert blur effect
        var blur:UIBlurEffect = UIBlurEffect(style: UIBlurEffectStyle.Light)
        var effectView:UIVisualEffectView = UIVisualEffectView (effect: blur)
        effectView.frame = CGRectMake(0,0,320,69)
        self.addSubview(effectView)

        // Insert the button if it doesn't exist already
        if !button {
            button = UIButton.buttonWithType(UIButtonType.System) as UIButton
            button.frame = CGRectMake(20, 25, 34, 34)
            button.setBackgroundImage(UIImage(named:"Back_Resultados.png"),forState: UIControlState.Normal)
            // Add self as a target
            button.addTarget(self, action: "didTapButton:", forControlEvents: .TouchUpInside)
            self.addSubview(button)
        }

    }

    func didTapButton(sender: UIButton!) {
        // Perform segue here or call out to a delegate to perform the segue
    }

}

这是关于如何以编程方式在Swift中创建按钮的SO帖子:Make a UIButton programmatically in Swift

您真的应该考虑将所有这些代码移动到一个设置方法中,该方法仅在创建视图时调用一次,而不是每次调用layoutSubviews时调用。此外,您可能希望向此视图类添加委托并将其设置为视图控制器。然后在视图控制器中实现一个可以为你执行segue的方法。

(p.s。我的一些语法可能已关闭。我在浏览器中写了这个,我还在和Swift搏斗)