【问题标题】:Showing the same UIBarButtonItem on many views在许多视图上显示相同的 UIBarButtonItem
【发布时间】:2015-05-12 07:50:32
【问题描述】:

我的 iOS 应用程序出现问题,我正在寻求帮助。我对 iOS 编程比较陌生,我确信有一些相对简单的解决方案可以解决我的问题。

首先,我要解释一下应用程序的层次结构:

  • 它使用UITabBarController 来显示几个不同的屏幕。
  • 它使用SWRevealViewController 来显示侧边栏
  • 从应用程序导航栏中的条形按钮项访问侧边栏。

应用程序使用SWRevealViewController https://github.com/John-Lluch/SWRevealViewController 不会直接影响我遇到的问题。如果您不熟悉此代码库,请考虑始终显示的简单条形按钮。

现在问题来了:

  • 我要显示的栏按钮与几行代码相关联。 (property 声明和一些方法)。
  • 此代码应用于应用程序中不同视图控制器的主要部分。

现在,在正常情况下,我只是将UIViewController 子类化并使其成为我所有应该显示此按钮的视图的超类。但是,我的应用程序还应该显示其他类型的视图,例如 UITableViewController,因此子类化并不能解决整个问题。

如果Objective-C 支持多重继承,我会创建一个包含此代码的类,并让我的其他类同时扩展UIViewController 的任何子类和我丑陋的支持类。

注意事项:

  • 目前,我的应用基于 Storyboards
  • TabBarController 指向多个UINavigationControllers,而不是任何没有导航栏的视图。
  • 我已经尝试使用Objective-c Category 来实现这一点,我在其中向 UIViewController 添加了一个类别,用于设置我的 UIViewController。但是当我需要为按钮添加@Property 并将其链接到 XIB/Storyboard 时,我陷入了这个解决方案。从这篇帖子Add the same UIBarButtonItem to several UIViewControllers 中得到了这个想法,但它不包含任何细节。

tl;dr:我想在我的许多应用程序视图中显示相同的 UIBarButtonItemUIBarButtonItem 与一些代码相关联,这对于所有这些视图也是相同的。

什么是实现这一目标的好方法?

【问题讨论】:

    标签: ios uibarbuttonitem objective-c-category swrevealviewcontroller


    【解决方案1】:

    如果我理解正确的话。
    您想为所有UIViewControllers 显示按钮。

    有很多方法可以实现这一点。请试试这个。
    1. 创建 UIView 的子类及其 XIB。它包含您的按钮。创建属性和IBAction
    2. 对这个子类实施您的操作。
    3. 在 .m 文件上写入以下代码

     - (id)awakeAfterUsingCoder:(NSCoder *)aDecoder
    {
        if (![self.subviews count])
        {
            NSBundle *mainBundle = [NSBundle mainBundle];
            NSArray *loadedViews = [mainBundle loadNibNamed:@"MyView" owner:nil options:nil];
            return [loadedViews firstObject];
        }
        return self;
    }
    


    其中,MyView 是您的视图的名称。
    4. 拖放 UIView 并将其放置在每个 `UIViewController XIB(或您的案例中的情节提要)上,并将其自定义类设置为“MyView”(或您新创建的类的名称)。
    5. 运行您的项目。

    供参考:May i help you?

    【讨论】:

    • 我不确定这是否能解决我的问题...“将其自定义类设置为 MyView”是指仅通用视图,还是指我项目中的所有视图?
    • 为每个视图控制器添加一个占位符视图,并为每个视图控制器将自定义类设置为 MyView。
    【解决方案2】:

    我现在已经解决了这个问题,我会在这里发布以供参考:

    这解决了向项目中的多个视图添加侧边栏按钮的问题,但代码应该可用于任何UIBarButton。解决方案是为UIViewController 创建一个Category,以指定设置方法。这个设置方法是从不同的视图中调用的。

    类别 .h 文件:

    #import <UIKit/UIKit.h>
    @interface UIViewController (SidebarCompliance)
    - (void)setupSidebar;
    @end
    

    类别 .m 文件:

    #import "UIViewController+SidebarCompliance.h"
    #import "SWRevealViewController.h"
    @implementation UIViewController (SidebarCompliance)
    - (void)setupSidebar {
        SWRevealViewController *revealViewController = self.revealViewController;
        if (revealViewController) {
            UIBarButtonItem *sidebarButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"menu.png"] landscapeImagePhone:[UIImage imageNamed:@"menu.png"] style:UIBarButtonItemStylePlain target:self.revealViewController action:@selector(revealToggle:)];
            self.navigationItem.rightBarButtonItem = sidebarButton;
            [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
        }
    }
    @end
    

    然后是我的观点之一:

    查看.h文件:

    #import <UIKit/UIKit.h>
    #import "UIViewController+SidebarCompliance.h"
    @interface NumeroUno : UIViewController
    @end
    

    查看.m文件:

    #import "NumeroUno.h"
    @implementation NumeroUno
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self setupSidebar];
    }
    @end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 2021-10-30
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多