等待X秒或用户输入

时间:2018-02-16 08:19:52

标签: ios swift

我很快就能做到这一点,所以即使这对我来说有点复杂;对不起,如果我做的话听起来很蠢。

序: 我有一个主视图控制器(我们称之为viewA)和一个从.xib文件中获取其功能的UIView,让我们调用这个视图B

这一切都在单个主视图控制器页面中

问题: 所以我希望我的ViewController按顺序执行一堆方法,其中一个方法是从这个viewB中的函数调用结果(它是一个子视图,所以我不能使用segues)

所以在函数中我想只返回结果 -

  1. 要按下的按钮
  2. 已过了30秒
  3. 解决这个问题最有效的方法是什么?

    编辑: 简而言之,我想让我的主队列执行等待,直到有来自玩家的输入或30秒已经过去

    代码结构:

    ViewController:
    class ViewController{
    
    var viewB:CustomView
    //methods
    function to execute{
    viewB.executeFunction()
    }
    }
    

    CustomView:

    class CustomView:UIView{
    
    //functions of initializing buttons and text boxes
    func executeFunction(){
    //wait for a user input to complete then return from this function. i cant figure out how this works
    }
    
    }
    

    Image of the UI idea

1 个答案:

答案 0 :(得分:0)

我认为选项1 更适合您的方案。按下笔尖按钮时可以调用块。以下是如何在swift中使用块的代码:

// Code for your UIViewController
func presentPopup() {
    let popup = NibClassName.instantiateViewFromNib()
    popup.btnPressBlock = { [unowned self] (success) -> () in
        // Code after button of UIView pressed
    }
    popup.frame = CGRect(x: 100, y: 100, width: 300, height: 300)
    self.view.addSubview(popup)
}

// Code of your UIView class file
var btnPressBlock: ((Bool) -> ())?

class func instantiateViewFromNib() -> NibClassName {
    let obj = Bundle.main.loadNibNamed("NibName", owner: nil, options: nil)![0] as! NibClassName
    return obj
}

@IBAction func btnPressed(sender: UIButton) {
    btnPressBlock!(true)
    removeFromSuperview()
}