Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何获取在另一个视图的UIView中点击哪个特定按钮的信息_Ios_Swift_Uibutton_Uikit - Fatal编程技术网

Ios 如何获取在另一个视图的UIView中点击哪个特定按钮的信息

Ios 如何获取在另一个视图的UIView中点击哪个特定按钮的信息,ios,swift,uibutton,uikit,Ios,Swift,Uibutton,Uikit,我想在我的应用程序中添加一个倒计时选项。有4种方法可以选择倒计时时间。我制作了一个单独的UIView,我把它命名为BreakTimeView。我有4个按钮。我想在按下其中一个按钮时在主viewController中获取信息。我想让这个信息给我一个计时器倒计时的具体秒数。我知道如果我在主viewController中从头开始创建此视图,我可以触发自己的操作。但是我不知道如果按钮在一个单独的视图中,如何通过这个秒数(Int)。我做了一些类似的事情,但在我看来这看起来并不好,问题是我如何才能做得更好/

我想在我的应用程序中添加一个倒计时选项。有4种方法可以选择倒计时时间。我制作了一个单独的UIView,我把它命名为BreakTimeView。我有4个按钮。我想在按下其中一个按钮时在主viewController中获取信息。我想让这个信息给我一个计时器倒计时的具体秒数。我知道如果我在主viewController中从头开始创建此视图,我可以触发自己的操作。但是我不知道如果按钮在一个单独的视图中,如何通过这个秒数(Int)。我做了一些类似的事情,但在我看来这看起来并不好,问题是我如何才能做得更好/更聪明

class ViewController: UIViewController {

    var value: Int = 0
    var bV = BreakTimeView()
    override func viewDidLoad() {
         super.viewDidLoad()
          
        bV = BreakTimeView(frame: CGRect(x: 0,
                                      y: view.frame.maxY + 50,
                                      width: view.frame.size.width,
                                      height: view.frame.size.width))
        view.addSubview(bV)
        
        let tap = UITapGestureRecognizer(target: self, action: #selector(animate))
        view.addGestureRecognizer(tap)
        
        bV.checkButtonPressed = {
            self.value = 30
            print(self.value)
        }
        bV.checkButtonPressed2 = {
            self.value = 45
            print(self.value)
        }
        bV.checkButtonPressed3 = {
            self.value = 60
            print(self.value)
        }
        bV.checkButtonPressed4 = {
            self.value = 90
            print(self.value)
        }
    }
    

    @objc func animate(){
        UIView.animate(withDuration: 1) {
            self.bV.transform = CGAffineTransform(translationX: 0, y: -self.bV.frame.size.width - 50)
        } completion: { completed in
            print("Ekran wjechał")
        }

    }
    
}

当然,我不会在应用程序中打印秒数,但我会将它传递给一个支持计时器的单独函数,但为了演示的目的,我只在
BreakTimeView
中包含此替换这些回调-

var checkButtonPressed : (() -> ()) = {}
var checkButtonPressed2 : (() -> ()) = {}
var checkButtonPressed3 : (() -> ()) = {}
var checkButtonPressed4 : (() -> ()) = {}

现在,您的按钮操作将如下所示

@objc private func action1() {
    checkButtonPressed(30)
}
@objc private func action2() {
    checkButtonPressed(45)
}
@objc private func action3() {
    checkButtonPressed(60)
}
@objc private func action4() {
    checkButtonPressed(90)
}
在呼叫站点,它看起来是这样的-

bV.checkButtonPressed = { [weak self] (numberOfSeconds) in
    self?.value = numberOfSeconds
    print(numberOfSeconds)
}

太棒了,谢谢你!
@objc private func action1() {
    checkButtonPressed(30)
}
@objc private func action2() {
    checkButtonPressed(45)
}
@objc private func action3() {
    checkButtonPressed(60)
}
@objc private func action4() {
    checkButtonPressed(90)
}
bV.checkButtonPressed = { [weak self] (numberOfSeconds) in
    self?.value = numberOfSeconds
    print(numberOfSeconds)
}