在swift中的UIView子类中创建子视图

时间:2014-07-24 05:29:10

标签: ios uiview uibutton swift

我有UIView子类的代码。

import UIKit

class DrawingSquareView: UIView {


    override func drawRect(rect: CGRect)
      {
        var apertureRect : CGRect = CGRectMake(80, 200, 160 , 158)
        var context : CGContextRef = UIGraphicsGetCurrentContext()

            /* draw the transparent rect */
        CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 0.0)
        CGContextSetBlendMode(context, kCGBlendModeCopy)
        CGContextFillRect(context, apertureRect)

    //        /* draw a white border */
        CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 1.0)
        CGContextStrokeRect(context, apertureRect)
     }
    override func awakeFromNib()
    {
    var cropButtons : UIButton = UIButton(frame: CGRectMake(70, 150, 160 , 158))
    cropButtons.setTitle("Crop Image", forState: UIControlState.Normal)
    cropButtons.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
    self.addSubview(cropButtons)

    }
    init(frame: CGRect)
    {
        super.init(frame: frame)
    }

     override func hitTest(point: CGPoint, withEvent event: UIEvent!) -> UIView!
     {
        var view : UIView = self.superview
        return view.viewWithTag(99)

    }
   }

以及用于在UIViewController类中调用UIView子类的代码

@IBAction func CropButtonClicked(sender: UIButton)
    {
        var DrawingSquareObject : DrawingSquareView = DrawingSquareView(frame:self.view.frame)
        self.view.addSubview(DrawingSquareObject)
   }

但是当我点击superview中的按钮时,它会显示我使用UIViewdraRect:子类中创建的矩形,但它显示了我的UIButton在awakefromNib()中创建。我尝试在init(frame:)init(coder:)addsubview(view:)函数中添加子视图,其中没有一个显示UIButton。另外,我想知道如何从DrawingSquareView中删除此superview

请帮助我,提前谢谢你。

1 个答案:

答案 0 :(得分:1)

我认为你的第一个问题是在init期间没有初始化视图,所以不要尝试添加子视图。

要从超级视图中删除DrawingSquareView,请尝试以下操作:

    for view in self.view.subviews {
        if view is DrawingSquareView {
            view.removeFromSuperview()
        }
    }