我正在尝试遵循MVC,它具有自己文件中视图的所有逻辑,而不是视图控制器。我现在要做的是在点击照片时放大照片,然后禁用与tableView的互动,即它在现在的前面(点击放大的图像,只需点击它下面的表观视图而改用...(。p>这是我尝试过的:
class TripsVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
static var imageCache:NSCache<NSString, NSData> = NSCache()
func disable() {
tableView.isUserInteractionEnabled = false
}
}
,然后
class profileView:shadowedview {
@IBOutlet var profilePictureView:UIImageView!
var aviFullscreen = false
var initalAviRect:CGRect!
override func awakeFromNib() {
super.awakeFromNib()
initalAviRect = profilePictureView.frame
let tap = UITapGestureRecognizer(target: self, action: #selector(self.showPhoto(_sender:)))
tap.numberOfTapsRequired = 1
profilePictureView.addGestureRecognizer(tap)
}
func showPhoto(_sender: UITapGestureRecognizer) {
superview?.bringSubview(toFront: profilePictureView)
switch aviFullscreen {
case false:
aviFullscreen = true
TripsVC.disable() //Issue Here -----------------------
UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseInOut, animations: { [weak self] in
self?.profilePictureView.frame = CGRect(x: (self?.superview?.frame.width)! * 0.125, y: 140, width: (self?.superview?.frame.width)! * 0.75, height: (self?.superview?.frame.width)! * 0.75)
}, completion: nil)
default:
aviFullscreen = false
TripsVC.enable() // Issue here---------------------
UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseInOut, animations: { [weak self] in
self?.profilePictureView.frame = (self?.initalAviRect)!
}, completion: nil)
}
}
}
当我尝试在个人资料视图中调用启用/禁用函数时,它不会让我。它给出了错误:
"实例成员" disable"不能在类型的" tripsvc"
"上使用我该如何完成?
您没有在TripsVC
实例上调用这些方法,而是尝试在类型上直接调用它(该方法不起作用(。
您需要添加一种方法来访问要启用/禁用的VC对象。
正常方法是:
- 使用禁用/启用函数定义协议
- 为该类型的协议类型添加VAR
- 在VC中实现协议
- 将此类的协议VAR设置为VC
- 通过该var 致电启用/禁用
so,
1:
protocol Enableable {
func enable()
func disable()
}
2:
var outerGUI: Enableable? = nil
3:
class TripsVC: UIViewController, Enableable // and whatever else you need
4:在tripsvc中
yourView.outerGUI = self
5:在课堂上,您正在显示
outerGUI?.enable() // or disable
您经常看到这个称为代表模式或类似的东西。