我怎么告诉我的UIView UIViewController中的按钮是否被按下了? (SWIFT)

时间:2016-12-30 16:22:49

标签: ios iphone swift uiview uiviewcontroller

是否可以在UIViewControllerUIView之间传递数据? 如果有,怎么样? 我在互联网上找不到任何解释它的东西。

例如,当您按下按钮1时,UIViewController会向该人按下按钮1的UIView说明,然后UIView会绘制一个圆圈。但是,如果您按button2 UIViewController向UIView说他现在已按下button2,然后UIView取消了圆圈并绘制了一个三角形。

按钮是以编程方式构建的。

问题是我如何调用我在drawRect UIView内使用UIViewController绘制的形状。

class ViewController: UIViewController { 
   @IBOutlet var UnitViewTabeller: UnitView!
   var btn: UIButton!

   override viewDidLoad {
     self.btn = UIButton(frame: CGRectMake(0.04 * view.bounds.width, 0.91 * view.bounds.height, 0.44 * view.bounds.width, 0.07 * view.bounds.height))  //set frame
            self.btn.layer.cornerRadius = 10
            self.btn.setTitle("0", forState: .Normal)  //set button title
            self.btn.setTitleColor(UIColor.whiteColor(), forState: .Normal) //set button title color
            self.btn.backgroundColor = UIColor(red: 0.2745, green: 0.2784, blue: 0.2706, alpha: 1.0) //set button background color
            self.btn.tag = 0 // set button tag
            self.btn.addTarget(self, action: "btnclicked:", forControlEvents: .TouchUpInside) //add button action
            self.view.addSubview(btn) //add button in view
            self.btnArray.append(btw)
   }

   func btnclicked(sender: UIButton) {
       //draw the Circle from the UIView
   }


}    
    class CircleView: UIView {

    override func drawRect(rect: CGRect) {
        let Circle = UIGraphicsGetCurrentContext()
        let rectangle = CGRect(x: 0.2 * bounds.width, y: 0.15 * bounds.height, width: 0.6 * bounds.width, height: 0.6 * bounds.width)
        CGContextSetLineWidth(Circle, 4.0)
        CGContextAddEllipseInRect(Circle, rectangle)
        CGContextStrokePath(Circle)
    }
}

1 个答案:

答案 0 :(得分:1)

以下是ShapeView的Swift 3中的一个示例,它在设置shape属性时重绘自身:

class ShapeView: UIView {
    var shape: Shape = .blank {
        didSet {
            // calling setNeedsDisplay() triggers a redraw of ShapeView
            setNeedsDisplay()
        }
    }

    enum Shape {
        case circle
        case triangle
        case blank
    }

    override func draw(_ rect: CGRect) {
        switch shape {
        case .circle: drawCircle()
        case .triangle: drawTriangle()
        default: break
        }
    }

    func drawCircle() {
        let circle = UIGraphicsGetCurrentContext()
        let rectangle = CGRect(x: 0.2 * bounds.width, y: 0.15 * bounds.height, width: 0.6 * bounds.width, height: 0.6 * bounds.width)
        circle?.setLineWidth(4.0)
        circle!.addEllipse(in: rectangle)
        circle!.strokePath()
    }

    func drawTriangle() {
        // code to draw a triangle
    }
}

假设您有ShapeViewshapeView对象作为ViewController的属性,您可以这样称呼它:

func drawCircleButton(_ sender: UIButton) {
    shapeView.shape = .circle
}

func drawTriangleButton(_ sender: UIButton) {
    shapeView.shape = .triangle
}