从自定义视图控制器继承以实现相似视图的行为多态性

问题描述

我在重用代码(故事板和实现)以在我的应用程序中有两个相似的视图时遇到了问题。它们只是在细节上有所不同,例如为表视图附加模型和处理一些用户交互。 为了在它们之间快速切换,我想将它们嵌入到 Tab Bar Controller 中,并且当用户点击另一个选项卡时,我将更改布局和处理事件的方式。 我遇到的第一个问题是有两个选项卡 - 所以我希望我可以在故事板中从选项卡栏到我的控制器制作两个 segue 并以编程方式重命名它们。好的,下一个问题是在故事板中设置一个自定义类 - 我希望我可以在这里设置一个超级视图控制器类名称并在代码中操作它。最后,在这种情况下如何连接 UI 元素?我试图将它们与超类连接,但它对我不起作用。

enter image description here

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”?或者我应该为我的问题找到不同的解决方案?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)