【问题标题】:how to use common class for all view controllers of uitabbarcontroller?如何为uitabbarcontroller的所有视图控制器使用公共类?
【发布时间】:2016-04-02 07:13:19
【问题描述】:

我有一个 UITabBarViewControllers 有 4 个 ViewControllers 和 4 NavigationController 嵌入使用情节提要。我将按钮作为左侧导航项放在所有 4 个 ViewController 中,它将以编程方式创建 UIView,如下面的屏幕截图所示。

现在这里的问题是我必须在所有 4 个 ViewController 中编写相同的代码。如果将来需要进行重大更改,我将不得不更改所有 ViewController 中的代码。我不知道如何解决这个问题?什么是最好的解决方案。这不是可行的编码方式。而且我是 iOS 开发的新手,所以在解释时要具体。感谢您的阅读。

【问题讨论】:

    标签: ios iphone uinavigationcontroller uitabbarcontroller xcode7


    【解决方案1】:

    您可以拥有一个像 SuperCommonVC 这样的超类,并编写所有 4 个控制器将拥有的所有通用功能。

    例如:超级普通

    @interface SuperCommonVC:UIViewController
    {
    }
    @end
    

    现在您只需将SuperCommonVC 扩展到您的所有 4 个控制器,例如

    例如:VC1

    @interface VC1:SuperCommonVC
    {
    }
    @end
    

    这只是简单的继承。现在您可以根据需要将 SuperCommonVC 的所有功能提供给您的 VC1 和其他人。

    【讨论】:

    • 我很困惑。以前从来没有这样做过。我可以找到相关的教程吗?
    • 这是一个面向对象编程的基本概念。例如,您可以查看 UIViewController 类,您总是 extend 到您的新 VC 类。关键是,您的 VC 类将具有您在 Super.xml 中定义的所有功能。例如。 viewWillAppear 会比你的 VC 更先调用 Super。
    【解决方案2】:

    我也面临同样的问题。我已经通过一些步骤解决了我的问题。

    以下是解决问题的步骤。

    1. 使您的视图控制器显示在屏幕截图中(视图控制器 包含左视图和前视图控制器)为rootViewController 主要UINavigationController(初始视图控制器)。

    2. 你的 4 个视图控制器应该是 UIViewController 不是 UINavigationController.

    执行上述更改后,您的问题将得到解决。

    【讨论】:

    • 感谢您的回复,但如果您能详细说明如何操作会更有帮助?你是说我只需要一个 NavigationController 来处理所有 4 个 ViewController 吗?我怎样才能在故事板中实现这一点?我猜一个 NavigationController 只能嵌入一个 ViewController
    • 参加一个自定义类UINaviagtionController。然后在该自定义类中设置左栏按钮并创建一个对象(例如customNav)。然后将选定的UIViewcontroller设置为`rootViewContoller``customNav。)这样你的问题就解决了。
    • 好的,我试试这个。顺便说一句,我发现你也是一个Gujju。我在 FB 上戳了你。
    【解决方案3】:

    您需要创建一个由所有其他视图控制器继承的 BaseViewController。您可以在 BaseViewController 中添加所需的方法,这些方法将在所有其他视图控制器中可用。

    例如。

    这将是所有其他类的超类。

    MenuBaseViewController.h
    ————————————————————————————
    @interface MenuBaseViewController : UIViewController 
    
    //declare properties and methods here
    
    - (void)showMenu;
    - (void)hideMenu;
    
    @end
    
    MenuBaseViewController.m
    ————————————————————————————
    @implementation MenuBaseViewController
    
    //implement methods here
    
    - (void)showMenu {
    
    //logic for showing menu
    //probably you need to set rootViewController what is selected.
    //You can create method for setting root view controller in AppDelegate
    
    }
    
    - (void)hideMenu {
    //logic for hiding menu
    }
    
    @end
    
    
    OneViewController.h
    ————————————————————————————
    @interface OneViewController : MenuBaseViewControlle 
    
    //declare properties and methods here
    
    @end
    
    OneViewController.m
    ————————————————————————————
    @implementation MenuBaseViewController
    
    //implement methods here
    
    //you can call showMenu, hideMenu to show/hide menu
    
    @end
    

    同样你需要在所有其他视图控制器中继承 MenuBaseViewController 并调用 showMenu/hideMenu 方法来显示或隐藏菜单。

    【讨论】:

    • 那是我不知道该怎么做的事情。
    • 查看编辑。我试图告诉你我们如何实现它。
    • 感谢您编写代码。我知道如何做到这一点。我以前什至试过这个。但我面临的问题是,ViewController 无法执行在公共类中创建的任何按钮的操作。显示菜单,隐藏菜单很容易。但是无法与侧边菜单中的元素进行交互。
    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    相关资源
    最近更新 更多