gpt4 book ai didi

swift - 我试图从 VC 中的另一个 View 禁用 tableview 上的 userInteraction,但它不会让我调用该函数

转载 作者:搜寻专家 更新时间:2023-11-01 07:12:09 25 4
gpt4 key购买 nike

我正在尝试遵循 MVC,它在自己的文件中包含 View 的所有逻辑,而不是 View Controller 。我现在想做的是在你点击照片时放大照片,然后禁用与它现在前面的 tableview 的交互(点击放大的图像只是点击它下面的 tableview ...)。

这是我尝试过的:

class TripsVC: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableView: UITableView!

static var imageCache:NSCache<NSString, NSData> = NSCache()

func disable() {
tableView.isUserInteractionEnabled = false
}
}

然后

类 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)
}

}

}

当我尝试在我的 profileView 中调用启用/禁用功能时,它不会让我这样做。它给出了错误:

“实例成员“disable”不能用于类型“TripsVC””

我该如何实现?

最佳答案

您不是在 TripsVC 实例上调用这些方法,而是试图直接在类型上调用它(这不会起作用)。

您需要添加一种方法来访问您要启用/禁用的 VC 对象。

正常的做法是:

  1. 定义一个带有禁用/启用函数的协议(protocol)
  2. 给这个协议(protocol)类型的类添加一个var
  3. 在VC中实现协议(protocol)
  4. 将此类的协议(protocol)变量设置为VC
  5. 通过该变量调用启用/禁用

所以,

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

您经常看到这称为委托(delegate)模式或类似的东西。

关于swift - 我试图从 VC 中的另一个 View 禁用 tableview 上的 userInteraction,但它不会让我调用该函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44267029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com