首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用委托协议的实现方法在哪里?

调用委托协议的实现方法在哪里?
EN

Stack Overflow用户
提问于 2019-09-01 07:02:25
回答 1查看 53关注 0票数 2

我对快速编程和面向对象编程很陌生,我正在尝试理解使用UIKit时的委托模式。我想我理解了放弃某些类责任的概念:类UITextField有一个(例如)UITextField实例,它在ViewController中实现了一些逻辑。

代码语言:javascript
运行
复制
class ViewController: UIViewController {
  let textField = UITextField(frame: CGRect(...))
  override func viewDidLoad() {
    textField.contentVerticalAlignment = .center
    textField.borderStyle = .roundedRect
    textField.placeholder = "Help me to figure it out"

    textField.delegate = self // set the controller as a delegate

    self.view.addSubview(textField)
  }
}

还有一个ViewController的扩展,它实现了UITextFieldDelegate协议的方法:

代码语言:javascript
运行
复制
extension ViewController: UITextFieldDelegate {
  func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    return false
  }

  ... // other methods
}

在阅读教程时,我有这样的想法:必须在UIKit中实现类似于此的逻辑:

代码语言:javascript
运行
复制
let allowEditing = delegate?.textFieldShouldBeginEditing() ?? true

但是我找不到这行代码所在的位置。我理解得对吗?这段代码在哪里?我搜索了文档和类实现,但没有找到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-01 07:06:51

你说得对!

您正在寻找的代码在UIKit的私有部分中,您看不到它。所有实现都是私有的。

请注意,此方法是一个objective可选方法,因此将像这样调用它(如果它是Swift代码):

代码语言:javascript
运行
复制
guard delegation?.textFieldShouldBeginEditing?() ?? true else { return }
becomeFirstResponder()

看到?之前的()了吗?

请注意,UIKit是用objective编写的,如果您想深入研究这两种语言,您应该考虑它们之间的差异。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57743866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档