gpt4 book ai didi

ios - 从父类(super class) iOS swift 中识别子类

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

我有一个 BaseViewController,我的 SearchViewController 是它的子类。我需要将父类(super class)中按钮的目标分配给子类中的方法。我在父类(super class)中有一个名为 addBackButton(_:) 的方法,它向 navigationView(自定义 View )添加了一个按钮。我从子类中调用这个方法。

我做了什么(代码在 swif 3 中):

上面的方法接受一个 viewcontroller 对象,我通过将 self 传递给方法从子类调用它。这样它工作正常。方法定义是这样的:

 func addBackButton(from vc: AnyObject) {
let button = UIButton(type: .custom)
button.frame = CGRect(x: 10, y: 20, width: 44, height: 44)
button.setImage(UIImage(named: "back")?.withRenderingMode(.alwaysTemplate), for: UIControlState())
button.tintColor = currentTheme.navButtonTintColor
if vc.isKind(of:SearchViewController.self) {
let controller: SearchViewController = self as! SearchViewController
button.addTarget(controller, action: #selector(controller.backButtonTapped(_:)), for: .touchUpInside)

}
navigationBarView.addSubview(button)
}

我有两个问题:

  1. 父类(super class)与子类之间的正确通信方式是什么?
  2. 上述方法运行良好。但是如果我执行 'vc is SearchViewController''vc.isKind(of:SearchViewController.self)',两者都可以正常工作。从父类(super class)中识别子类的正确方法是什么?

编辑:

根据 anbu.karthiks 的评论,我使用父类(super class)中的 self 来标识子类。

 func addBackButton() {
let button = UIButton(type: .custom)
button.frame = CGRect(x: 10, y: 20, width: 44, height: 44)
button.setImage(UIImage(named: "back")?.withRenderingMode(.alwaysTemplate), for: UIControlState())
button.tintColor = currentTheme.navButtonTintColor
switch self {
case is SearchViewController:
let controller: SearchViewController = self as! SearchViewController
button.addTarget(controller, action: #selector(controller.backButtonTapped(_:)), for: .touchUpInside)
break
case is HelpViewController:
let controller: HelpViewController = self as! HelpViewController
button.addTarget(controller, action: #selector(controller.backButtonTapped(_:)), for: .touchUpInside)
break
default:
break
}

navigationBarView.addSubview(button)
}

最佳答案

是的,您完成它的方式工作正常,并且是一种实现方式。另一种方法如下:

if let controller = vc as? SearchViewController {
// use controller in here which is casted to your class and ready to be used
}

所以你的代码:

func addBackButton(from vc: AnyObject) {
let button = UIButton(type: .custom)
button.frame = CGRect(x: 10, y: 20, width: 44, height: 44)
button.setImage(UIImage(named: "back")?.withRenderingMode(.alwaysTemplate), for: UIControlState())
button.tintColor = currentTheme.navButtonTintColor
if let controller = vc as? SearchViewController {
button.addTarget(controller, action: #selector(controller.backButtonTapped(_:)), for: .touchUpInside)
}
navigationBarView.addSubview(button)
}

What is the right way of communication between superclass to subclass?

没有什么是对的或错的,但有些方法比其他方法更好。查看我上面的示例,了解如何执行此操作的一个示例。

关于ios - 从父类(super class) iOS swift 中识别子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44241269/

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