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'屬性與代表無關,並且有很多次使用與superviews無關的代表。跳到蘋果的開發者網站並閱讀它。 – DonMag
@DonMag我更新了這個問題現在沒有意義嗎? – alpiopio
不,因爲它們仍然是根本不同的任務。可能在某種情況下,您正在考慮您將使用的代表也是超級視圖。但這不是一般情況。當你需要用superview做某些事情時,通常會找到超級視圖,而不管該對象是什麼。無論對象在哪裏,您都可以在使用委託對象時使用委託。 – Paulw11