我在iOS应用程序中遇到问题,我正在寻求帮助。我对iOS编程比较陌生,我确信我的问题有一些相对简单的解决方案。
首先,我将解释应用程序的层次结构:
UITabBarController
来显示几个不同的屏幕。SWRevealViewController
来显示侧边栏应用程序使用SWRevealViewController
https://github.com/John-Lluch/SWRevealViewController并不直接影响我所遇到的问题。如果您不熟悉此代码库,只需考虑始终显示的简单栏按钮。
现在问题:
property
声明和一些方法)。 现在在正常情况下,我只是将UIViewController
子类化,并使其成为我应该显示此按钮的所有视图的超类。但是,我的应用程序还应该显示其他类型的视图,例如UITableViewController
,因此子类化不会解决整个问题。
如果Objective-C
支持多重继承,我会创建一个包含此代码的类,让我的其他类同时扩展UIViewController
的任何子类和我丑陋的支持类。
注意:
TabBarController
指向多个UINavigationController
s,而不指向任何没有导航栏的视图。 Objective-c
Category
实现这个,我在UIViewController中添加了一个类别来设置我的UIViewController。但是当我需要为按钮添加@Property
并将其链接到XIB / Storyboard时,我就陷入了这个解决方案的困境。从这篇文章Add the same UIBarButtonItem to several UIViewControllers得到了这个想法,但它并没有包含任何细节。 tl; dr:我想在我的许多应用程序视图中显示相同的UIBarButtonItem
。 UIBarButtonItem
与某些代码相关联,对于所有这些视图也是如此。
实现这一目标的好方法是什么?
答案 0 :(得分:0)
如果我理解正确的话。
您想要显示所有UIViewControllers
的按钮。
有很多方法可以实现这一目标。请试试这个。
1.使用XIB创建UIView的子类。它包含您的按钮。创建属性和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?
答案 1 :(得分:0)
我现在已经解决了这个问题,我将在此处发布以供参考:
这解决了向项目中的多个视图添加侧边栏按钮的问题,但代码应该可用于任何UIBarButton
。解决方案是为Category
创建UIViewController
,指定设置方法。从不同的视图调用此设置方法。
类别.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