【发布时间】:2017-12-14 16:56:12
【问题描述】:
我有一个按以下方式定义的小协议:
import UIKit
protocol HasMeterAnimation {
func animateMeter(scrollableView: UIScrollView)
}
它的实现需要使用 IBOutlets:
func animateMeter(scrollableView: UIScrollView) {
let maxYPosTableview = scrollableView.frame.height + scrollableView.frame.origin.y
let progressBarRect = self.progressBar.frame
let rectOfProgressBarInParentView = self.convert(progressBarRect, to: scrollableView.superview)
let maxYPosMeter = rectOfProgressBarInParentView.origin.y + progressBarRect.height
if maxYPosTableview > maxYPosMeter {
if progressBar.isHidden == false {
progressBar.animateProgressBar()
model.shouldMeterAnimate = false
}
}
}
我想知道是否有一种方法可以让我使用 IBOutlets 在协议扩展中编写此实现......像这样:
protocol HasMeterAnimation {
@IBOutlet var progressBar:AnimatedProgressBar! { get set }
var model: ListItem! { get set }
func animateMeter(scrollableView: UIScrollView)
}
extension HasMeterAnimation {
func animateMeter(scrollableView: UIScrollView) {
let maxYPosTableview = scrollableView.frame.height + scrollableView.frame.origin.y
let progressBarRect = self.progressBar.frame
let rectOfProgressBarInParentView = self.convert(progressBarRect, to: scrollableView.superview)
let maxYPosMeter = rectOfProgressBarInParentView.origin.y + progressBarRect.height
if maxYPosTableview > maxYPosMeter {
if progressBar.isHidden == false {
progressBar.animateProgressBar()
model.shouldMeterAnimate = false
}
}
}
我尝试了很多方法,但总是给我错误。谢谢
【问题讨论】:
-
删除
@IBOutlet是否有错误?在这里帮不上忙。您收到什么错误? -
我解决了。公认的答案是正确的...... IBOutlets 在协议中毫无意义。我只是在协议中定义了一个属性,并在控制器中作为 IbOutlet 实现。