Swift:在调用函数时创建UI

时间:2016-07-25 20:47:11

标签: ios swift views

我在这里有一个观点:

let placeContainerView: UIView = {
    let view = UIView()
    view.backgroundColor = UIColor.whiteColor()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.layer.cornerRadius = 7
    view.layer.masksToBounds = true

    return view
}()

每次调用函数“createNewView()”时,我都希望在它旁边创建一个。

    let showFullPlaceContainerView = UITapGestureRecognizer(target: self, action: #selector(showFullPlaceContainerViewFunction))
    placeContainerView.addGestureRecognizer(showFullPlaceContainerView)

我希望每个placeContainerView都能响应。

所以我希望生成一个视图,我会给它一些值。然后当我调用函数createNewView()时,我会在它旁边看到一个完全相同的新视图,除了我输入的任何新值。

如果您有任何想法,请告诉我们!

谢谢

编辑:

下面的代码演示了我每次都要如何设置placeContainerView,但我需要显示它们以便每次placeContainerView.topAnchor()都不同。如果它保存在自己的类中,它究竟是如何工作的并且不知道它被创造了多少次?

另外,由于placeContainerView包含placeLabel和placeImageView,所以必须在新的PlaceContainerViewClass中生成这些吗?

func setupPlaceContainerView() {
    placeContainerView.leftAnchor.constraintEqualToAnchor(view.leftAnchor, constant: -180).active = true
    placeContainerView.topAnchor.constraintEqualToAnchor(view.topAnchor, constant: 80).active = true
    placeContainerView.widthAnchor.constraintEqualToConstant(227).active = true
    placeContainerView.heightAnchor.constraintEqualToConstant(45).active = true


    placeContainerView.addSubview(placeLabel)
    placeContainerView.addSubview(placeImageLabelSeparator)
    placeContainerView.addSubview(placeImageView)

    placeLabel.leftAnchor.constraintEqualToAnchor(placeContainerView.leftAnchor).active = true
    placeLabel.topAnchor.constraintEqualToAnchor(placeContainerView.topAnchor).active = true
    placeLabel.widthAnchor.constraintEqualToConstant(180).active = true
    placeLabel.heightAnchor.constraintEqualToAnchor(placeContainerView.heightAnchor).active = true

    placeImageLabelSeparator.leftAnchor.constraintEqualToAnchor(placeLabel.rightAnchor).active = true
    placeImageLabelSeparator.topAnchor.constraintEqualToAnchor(placeContainerView.topAnchor).active = true
    placeImageLabelSeparator.widthAnchor.constraintEqualToConstant(2).active = true
    placeImageLabelSeparator.heightAnchor.constraintEqualToAnchor(placeContainerView.heightAnchor).active = true

    placeImageView.leftAnchor.constraintEqualToAnchor(placeImageLabelSeparator.rightAnchor).active = true
    placeImageView.topAnchor.constraintEqualToAnchor(placeContainerView.topAnchor).active = true
    placeImageView.widthAnchor.constraintEqualToConstant(45).active = true
    placeImageView.heightAnchor.constraintEqualToAnchor(placeContainerView.heightAnchor).active = true

1 个答案:

答案 0 :(得分:1)

如@ Paulw11所述,这项任务只需创建一个新类即可完成。

class placeContainerView:UIView {

    var x:Double!
    var y:Bool!
    var z:UILabel!
    var controller:UIViewController!

    //If you want to pass specific values number, you can use convenience init method OR you can use the default init method they give you.
    //previousLabelFrame:CGrect = CGRect() // I defaulted all these values to 0, make them whatevree u need. You would use the default one for the first Label you would make. Then after that, you would pass in the previous one made, to get the frame of it so you can add to the one after that. 
    convenience init(x:Double,y:Bool, z:UILabel, previousLabelFrame:CGRect = CGRect(x: 0, y:0, width:0, height:0), VC:UIViewController) {
        self.x = x
        self.y = y
        self.z = z
        self.controller = VC
        let distance = self.controller.width*0.1 //Whatever u decide here
        //You could just do CGRect(x:previousLabelFrame.maxX+distance, depeding on what you need. 
        self.frame = CGRect(x: previousLabelFrame.minX+distance, y:previousLabelFrame.minY, width: previousLabelFrame.width, height:previousLabelFrame.height)
    }

}

ViewController中的用法:

var views:[placeContainerView] = []

let view:placeContainerView = placeContainerView(10, true, UILabel(),views[views.count-1], self)
 self.views.append(view)
//OR if this is the FIRST placeContainerView of the whole app, it will use the default values for the frame.
let view:placeContainerView = placeContainerView(10, true, UILabel(), self)
self.views.append(view)

如何使用的一些奇怪的例子。 然后每次他们点击一个按钮,只需创建一个新的placeContainerView