gpt4 book ai didi

swift - 按钮目标方法逻辑应该在 UIView 还是 UIViewController 中定义

转载 作者:行者123 更新时间:2023-11-28 11:24:56 25 4
gpt4 key购买 nike

我在 UIView 类中定义了一个按钮和一个 TextView 。按下时将发出网络请求。我应该在 UIView 或 UIViewController 中添加 button.addTarget 吗? MVC 的方法是什么。

class MessageInputView: UIView {

let send_button: UIButton = {
let button = UIButton()
button.translatesAutoresizingMaskIntoConstraints = false
button.backgroundColor = .red
button.setTitle("Send", for: .normal)
button.setTitleColor(UIColor.black, for: .normal)
return button
}()

let textView: UITextView = {
let textView = UITextView()
textView.translatesAutoresizingMaskIntoConstraints=false
textView.clipsToBounds = true
textView.layer.cornerRadius = 19.5
textView.layer.borderWidth = 1
textView.layer.borderColor = UIColor.inputTextViewColor.cgColor
return textView
}()
}


class ChatMessagesViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

let messageInputView = MessageInputView()
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .white
messageInputView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(messageInputView)
setMessagesInputViewConstraints()
}

}

最佳答案

如果您的 View 元素有自定义类,您应该在该类中声明 IBAction,但逻辑应该发生在 View Controller (或其他架构中的其他负责类)中。

您可以通过委托(delegate)模式或在闭包的帮助下建立 View 和 View Controller 之间的连接,以更适合您的代码的方式为准。

这是闭包的例子:

class CustomView: UIView {
// ...
var buttonHandler: (() -> Void)?

@IBAction func buttonAction(_ sender: UIButton) {
buttonHandler?()
}
// ...
}

class ViewController: UIViewController {
// ...
override func viewDidLoad() {
// ...
customView.buttonHander = { print("User clicked the button") }
}
}

关于swift - 按钮目标方法逻辑应该在 UIView 还是 UIViewController 中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58479860/

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