我正在尝试从VC中的另一个视图上禁用theceview上的用户互动,但它不会让我调用该函数



我正在尝试遵循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对象。

正常方法是:

  1. 使用禁用/启用函数定义协议
  2. 为该类型的协议类型添加VAR
  3. 在VC中实现协议
  4. 将此类的协议VAR设置为VC
  5. 通过该var
  6. 致电启用/禁用

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

您经常看到这个称为代表模式或类似的东西。

最新更新