override func draw(_ rect: CGRect) {
let size: CGFloat = 20
let currencyLbl = UILabel(frame: CGRect(x: 5, y: (frame.size.height/2) - size, width: size, height: size))
currencyLbl.backgroundColor = #colorLiteral(red: 0.2549019754, green: 0.2745098174, blue: 0.3019607961, alpha: 0.5)
currencyLbl.textAlignment = .center
currencyLbl.textColor = #colorLiteral(red: 0.2549019754, green: 0.2745098174, blue: 0.3019607961, alpha: 1)
currencyLbl.layer.cornerRadius = 5.0
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = .current
currencyLbl.text = formatter.currencySymbol
addSubview(currencyLbl)
}
addSubview在Xcode中的解释是“将视图添加到接收者的子视图列表的末尾”,并说“此方法建立了一个强大的参考视图,并将其下一个响应者设置为接收者,即其新的超级视图”。 / p>
您能在这种情况下解释“接收者”和“视图-超级视图”吗?
答案 0 :(得分:0)
在此示例中
let myView = UIView()
parentView.addSubview(myView) // here myView is a subview
parentView
被称为myView的接收器或 superView
此
此方法为视图建立了强大的参考,并将其下一个响应者设置为接收者,即其新的超级视图。
表示如果您在prentView中添加了一个子视图,比如说一个本地函数,该子视图将被取消分配函数执行的末尾,那么addSubview
将对该子视图保持强大的引用,并防止重新分配过程< / p>
还有这个
视图只能有一个超级视图。如果视图已经具有超级视图,而该视图不是接收者,则此方法会在使接收者成为其新的超级视图之前删除先前的超级视图
表示如果将myView添加到parentView1,那么它将是一个唯一的superView;如果尝试将其添加到parentView2,则它将自动从parentView1删除并添加到parentView2
还有这个
在接收者的子视图列表的末尾添加一个视图
这是一堆子视图,当您将myView1添加到parentView,然后添加myView2时,将导致myView2高于myView1s,因此它将在任何事件中都处于活动状态,并且如果说它们具有相同的框架,则在myView1中将其阻止>
答案 1 :(得分:0)
“接收者”是对“消息”发送到“对象”的objective-c时代的回归。因此,我们的老人(哈哈)曾经打电话给[someView addSubview:anotherView]
而不是someView.addSubview(anotherView)
。在这种情况下,“ someView”是接收者,因为它正在接收“ addSubview”消息。
视图存储在层次结构中,基本上是一棵树,其中每个视图可以有许多子级(子视图),但只有一个父级(超级视图)。在我的示例中,“ someView”是superView(父级),其中“ anotherView”将作为子视图(子级)添加。
在您的示例中,您正在实现的类既有接收者又有superview。它是接收者,因为您的addSubview调用隐式为“ self.addSubview”,这意味着“ self”是接收者。这是超级视图,因为currencyLbl作为子视图添加到了它。
明确说明您的具体情况:
(注意-Receiver和Superview不是同义词,在这种情况下,它们恰好指向同一对象。它们是完全无关的概念。)