0
私はコードに指向の迅速な使用プロトコルを知っているが、グラブ親ビューまたはコントローラのため、我々はまだ最高の代表者となるかスーパービューを取得するのですか?
はスーパーの例を見るようにスーパーを取得に使用できるよう、誰もが、デリゲート/プロトコル指向を使用するか、スーパーを取得するための理由を与えるために私を助けることができます:
extension UIView {
var parentViewController: UIViewController? {
var parentResponder: UIResponder? = self
while parentResponder != nil {
parentResponder = parentResponder!.next
if let viewController = parentResponder as? UIViewController {
return viewController
}
}
return nil
}
}
使用デリゲート例:
protocol SomeDelegate {
func didClick()
}
class Child {
var delegate: SomeDelegate?
}
何長所とデリゲートを使用するか、スーパービューを取得するのか? parentViewため
例:デリゲートため
class Cell {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.parentViewController.view.makeToast("Something !")
}
}
例:
class Parent: SomeDelegate {
func didClick() {
self.view.makeToast("Something !")
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableview.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? Cell
cell.delegate = self
return cell
}
}
class Cell {
var label: UILabel
var delegate: SomeDelegate?
func configure() {
label.addGestureRecognizer(UILongPressGestureRecognizer(
target: self,
action: #selector(copyAction(_:))
))
}
@objc private func copyAction(_ sender: UILongPressGestureRecognizer) {
guard let delegate = self.delegate else {
return
}
delegate.didClick()
}
}
デリゲートパターンと「スーパービューの取得」が同じものではないため、あなたの質問は意味をなさない。 '.superview'プロパティはデリゲートとは何の関係もなく、スーパービューとは何の関係もないデリゲートを使う時間がたくさんあります。アップルの開発者サイトに移動し、それを読んでください。 – DonMag
@DonMag今私は質問をしましたか? – alpiopio
いいえ、それらは基本的には異なるタスクです。あなたが使用するデリゲートがスーパービューであると考える場合もあります。しかし、これは一般的なケースではありません。そのオブジェクトが何であるかにかかわらず、スーパービューで何かをする必要があるときは、通常、スーパービューを見つけるでしょう。そのオブジェクトがどこにあるかにかかわらず、デリゲートオブジェクトを使用する場合は、デリゲートを使用します。 – Paulw11