gpt4 book ai didi

ios - 导航栏上的常用栏按钮项

转载 作者:行者123 更新时间:2023-11-28 13:36:47 25 4
gpt4 key购买 nike

我有 10 个 ViewController,其中有 NavigationBar,每个 VC 有相同的 3 个 Barbutton 项目(左边 1 个,右边 2 个)。现在我在每个 ViewController 中添加了相同的按钮,因此我在 10 个 Controller 中为相同的条形按钮项目复制了代码。

对于这种情况,正确的方法是什么。我考虑过使用 UIViewController 作为 Base 并将这些 BarButtonItem 添加到 NavigationBar 上,但是在使用该路径时我遇到了问题,因为我正在使用 Coordinator 用于导航,这 3 个 BarButtonItem 中的每一个都导航到其他屏幕。同样,我也尝试了 UIViewController 扩展,但仍然存在导航问题。

最佳答案

objective-c

在一个公共(public)类中声明这些方法,我有 Utilities.h

+ (NSArray *)setButtonWithTitle:(NSString *)title target:(id)target action:(SEL)action;
+ (NSArray *)setButtonWithImage:(NSString *)imgName target:(id)target action:(SEL)action;
+ (NSArray *)setTwoButtonWithTarget:(id)target action1:(SEL)action1 image1:(NSString *)imgName1 action2:(SEL)action2 image2:(NSString *)imgName2;

然后在各自的文件中定义这些方法。因为我有 Utilities.m

+ (NSArray *)setButtonWithTitle:(NSString *)title target:(id)target action:(SEL)action {

UIBarButtonItem *negativeSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
negativeSpace.width = -10;
UIBarButtonItem *textBarButton = [[UIBarButtonItem alloc] initWithTitle:title style:UIBarButtonItemStylePlain target:target action:action];

NSArray *arrBarItems = [NSArray arrayWithObjects:negativeSpace, textBarButton, nil];
return arrBarItems;
}

+ (NSArray *)setButtonWithImage:(NSString *)imgName target:(id)target action:(SEL)action {

UIBarButtonItem *negativeSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
negativeSpace.width = -5;
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:imgName] style:UIBarButtonItemStylePlain target:target action:action];

NSArray *arrBarItems = [NSArray arrayWithObjects:negativeSpace, backButton, nil];
return arrBarItems;
}

+ (NSArray *)setTwoButtonWithTarget:(id)target action1:(SEL)action1 image1:(NSString *)imgName1 action2:(SEL)action2 image2:(NSString *)imgName2 {

UIBarButtonItem *negativeSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
negativeSpace.width = -5;

UIBarButtonItem *barButton1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:imgName1] style:UIBarButtonItemStylePlain target:target action:action1];
UIBarButtonItem *barButton2 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:imgName2] style:UIBarButtonItemStylePlain target:target action:action2];

NSArray *arrBarItems = [NSArray arrayWithObjects:negativeSpace, barButton2, barButton1, nil];
return arrBarItems;
}

如果您需要对按钮进行更多自定义,如 bgcolor、titlecolor 等,请使用上述方法。然后使用 UIButton 并将其与 barbuttonitem 一起使用。

现在,在每个 ViewController 中,您只需要放置两行,一根用于左键,一根用于右键。

self.navigationItem.leftBarButtonItems = [Utilities setButtonWithImage:@"ic_back" target:self action:@selector(goBackToPreviousView:)];
self.navigationItem.rightBarButtonItems = [Utilities setTwoButtonWithTarget:self action1:@selector(showSearchBar:) image1:@"ic_search" action2:@selector(showSortFilters:) image2:@"ic_sort"];

swift

class Utilities {

class func setButtonWith(title:String, target:Any, action:Selector) -> [UIBarButtonItem] {

let negativeSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.fixedSpace, target:nil, action:nil)
negativeSpace.width = -10;
let textBarButton = UIBarButtonItem(title:title, style:UIBarButtonItem.Style.plain, target:target, action:action)

let arrBarItems = [negativeSpace, textBarButton]
return arrBarItems
}

class func setButtonWith(imgName: String, target:Any, action:Selector) -> [UIBarButtonItem] {

let negativeSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.fixedSpace, target:nil, action:nil)
negativeSpace.width = -5;
let backButton = UIBarButtonItem(image:UIImage(named:imgName), style:UIBarButtonItem.Style.plain, target:target, action:action)

let arrBarItems = [negativeSpace, backButton]
return arrBarItems
}

class func setTwoButtonWith(target:Any, action1:Selector, imgName1:String, action2:Selector, imgName2:String) -> [UIBarButtonItem] {

let negativeSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.fixedSpace, target:nil, action:nil)
negativeSpace.width = -5;

let barButton1 = UIBarButtonItem(image:UIImage(named:imgName1), style:UIBarButtonItem.Style.plain, target:target, action:action1)
let barButton2 = UIBarButtonItem(image:UIImage(named:imgName2), style:UIBarButtonItem.Style.plain, target:target, action:action2)

let arrBarItems = [negativeSpace, barButton2, barButton1]
return arrBarItems
}
}

无论你需要什么,都可以这样调用它:

self.navigationItem.leftBarButtonItems = Utilities.setButtonWith(imgName: "ic_back", target: self, action: #selector(goBackToPreviousView))
self.navigationItem.rightBarButtonItems = Utilities.setTwoButtonWith(target: self, action1: #selector(showSearchBar), imgName1: "ic_search", action2: #selector(showSortFilters), imgName2:

关于ios - 导航栏上的常用栏按钮项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56508203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com