ios - 从自定义视图控制器继承以使相似视图的行为多态
问题描述
我在重用代码(故事板和实现)以在我的应用程序中拥有两个相似视图时遇到了问题。它们只是在细节上有所不同,例如为表格视图附加模型和处理一些用户交互。为了在它们之间快速切换,我想将它们嵌入到选项卡栏控制器中,并且当用户点击另一个选项卡时,我将更改布局和处理事件的方式。我遇到的第一个问题是有两个选项卡 - 所以我希望我可以在情节提要中从选项卡栏到我的控制器进行两个 segues 并以编程方式重命名它们。好的,下一个问题是继续在故事板中设置一个自定义类 - 我希望我可以在这里设置一个超级视图控制器类名称并在代码中操作它。最后,在这种情况下如何连接 UI 元素?我试图将它们与超类联系起来,但它不是
class NavControllerViewController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let tabBar = storyboard.instantiateViewController(identifier: "TabBar") as? TabBarViewController
let first = storyboard.instantiateViewController(identifier: "Base") as? FirstViewController
let second = storyboard.instantiateViewController(identifier: "Base") as? SecondViewController
tabBar!.setViewControllers([first!, second!], animated: true)
}
}
class TabBarViewController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.tabBar.items?.first?.title = "First"
self.tabBar.items?.last?.title = "Last"
self.delegate = self
// Do any additional setup after loading the view.
}
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if viewController is FirstViewController {
debugPrint("FIRST CONT")
} else if viewController is SecondViewController {
debugPrint("SECOND CONT")
}
}
}
class BaseViewController: UIViewController {
@IBOutlet weak var customButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func didTouchCustomButton(_ sender: UIButton) {
debugPrint("BASE")
}
}
class FirstViewController: BaseViewController {
@IBAction override func didTouchCustomButton(_ sender: UIButton) {
super.didTouchCustomButton(sender)
debugPrint("FIRST")
}
}
class SecondViewController: BaseViewController {
@IBAction override func didTouchCustomButton(_ sender: UIButton) {
super.didTouchCustomButton(sender)
debugPrint("SECOND")
}
}
这是我的代码和我的这个任务的故事板。当我点击一个按钮时,我得到一个文本“BASE”,所以多态性对我不起作用。是否可以将我的控制器设置为标签栏,然后正确处理视图控制器?我的意思是:当我在选项卡 First -> 写“FIRST”时,在第二个 -> “SECOND” 在点击按钮后?或者我应该为我的问题找到不同的解决方案?
解决方案
推荐阅读
- socket.io - 使用io.netty 4.1.29接收几分钟后未收到数据
- php - 当我单击一个按钮时,Jquery 中发生了什么
- javascript - 制作 DOM 元素的副本
- amazon-web-services - 使用 AWS S3 上传邮寄给用户的文档(适用于基于电子邮件/移动身份验证的某些用户)的最安全方法是什么?
- javascript - 查找所有重复项
- java - 运行logstash时使用ConcMarkSweepGC Erroe
- python - 如何将数据框名称作为字符串获取?
- glsl - 使用 glslc.exe 的最佳方法是什么
- c# - 如何跨多个注入服务继承 DatabaseContext 作为基类
- database - 如何在外键上连接三列?