Ios 定制维吾尔巴布托邦

Ios 定制维吾尔巴布托邦,ios,objective-c,uinavigationbar,uibarbuttonitem,Ios,Objective C,Uinavigationbar,Uibarbuttonitem,我正在尝试创建一个自定义UIBarButtonim,它只使用一个透明的png,这样我就只有一个图标作为按钮。当我尝试设置按钮图像时,将背景设置为白色,并将样式设置为普通,我仍然会在其周围获得一个内部阴影和黑色边框 UIImage *background = [UIImage imageNamed:@"Dismiss_normal.png"]; UIImage *backgroundSelected = [UIImage imageNamed:@"Dismiss_selected.png"]; s

我正在尝试创建一个自定义UIBarButtonim,它只使用一个透明的png,这样我就只有一个图标作为按钮。当我尝试设置按钮图像时,将背景设置为白色,并将样式设置为普通,我仍然会在其周围获得一个内部阴影和黑色边框

UIImage *background = [UIImage imageNamed:@"Dismiss_normal.png"];
UIImage *backgroundSelected = [UIImage imageNamed:@"Dismiss_selected.png"];
self.closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.closeButton addTarget:self action:@selector(closeButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; //adding action
[self.closeButton setBackgroundImage:background forState:UIControlStateNormal];
[self.closeButton setBackgroundImage:backgroundSelected forState:UIControlStateSelected];
self.closeButton.frame = CGRectMake(0 ,0,background.size.width, background.size.height);
self.closeButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.closeButton];
self.navigationItem.leftBarButtonItem = self.closeButtonItem;
有什么好处

我已经尝试了下面的代码,但它仍然会在它周围加上黑色边框

UIImage *background = [UIImage imageNamed:@"Dismiss_normal.png"];
UIImage *backgroundSelected = [UIImage imageNamed:@"Dismiss_selected.png"];
self.closeButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.closeButton addTarget:self action:@selector(closeButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; //adding action
[self.closeButton setBackgroundImage:background forState:UIControlStateNormal];
[self.closeButton setBackgroundImage:backgroundSelected forState:UIControlStateSelected];
self.closeButton.frame = CGRectMake(0 ,0,background.size.width, background.size.height);
self.closeButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.closeButton];
self.navigationItem.leftBarButtonItem = self.closeButtonItem;

我注意到的是,如果我对按钮进行模式切换,上面的代码仍然有一个黑色边框,但是如果我进行按键切换,它没有?WTF?

尝试使用[UIBarButtonItem initWithCustomView]

UIImage *menuButtonImage = [UIImage imageNamed:@"list.png"];// set your image Name here 
UIButton *btnToggle = [UIButton buttonWithType:UIButtonTypeCustom];
[btnToggle setImage:menuButtonImage forState:UIControlStateNormal];
btnToggle.frame = CGRectMake(0, 0, menuButtonImage.size.width, menuButtonImage.size.height);
UIBarButtonItem *menuBarButton = [[UIBarButtonItem alloc] initWithCustomView:btnToggle];
self.navigationItem.leftBarButtonItem = menuBarButton;
请尝试此代码

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *btnImage = [UIImage imageNamed:@"bg"];
[button setImage:btnImage forState:UIControlStateNormal];
button.frame = CGRectMake(0, 0, btnImage.size.width, btnImage.size.height);
[button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
UIImage *icon = [UIImage imageNamed:@"icon"]
UIImageView *iconView = [[UIImageView alloc] initWithImage:icon];
iconView.frame = CGRectMake(0, 0, icon.size.width, icon.size.height);
[button addSubview:iconView];
iconView..userInteractionEnabled=NO;
[iconView centerBothDirections];
[iconView release];
UIBarButtonItem *barbtn = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease];
self.navigationItem.leftBarButtonItem =barbtn

必须将按钮类型设置为自定义,将图标图像设置为按钮背景。 示例代码:

UIImage *background = [UIImage imageNamed:@"icon.png"];
UIImage *backgroundSelected = [UIImage imageNamed:@"icon_selected.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(checkButtonTapped:event:) forControlEvents:UIControlEventTouchUpInside]; //adding action
[button setBackgroundImage:background forState:UIControlStateNormal];
[button setBackgroundImage:backgroundSelected forState:UIControlStateSelected];
button.frame = CGRectMake(0 ,0,35,35);
然后将此按钮设置为BarButtonItem,如下所示:

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button];
self.navigationItem.leftBarButtonItem = barButton;
我个人喜欢这种方法,即通过UI外观将整个UI展平

基本上,您可以做如下操作:

UIImage *backButtonPortraitImage = [UIImage backButtonImageWithColor:color barMetrics:UIBarMetricsDefault cornerRadius:cornerRadius];
UIImage *highlightedBackButtonPortraitImage = [UIImage backButtonImageWithColor:highlightedColor barMetrics:UIBarMetricsDefault cornerRadius:cornerRadius];

[appearance setBackButtonBackgroundImage:backButtonPortraitImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[appearance setBackButtonBackgroundImage:highlightedBackButtonPortraitImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

UIImage *buttonImageNormal       = [UIImage imageWithColor:color cornerRadius:cornerRadius];
UIImage *buttonImageHightlighted = [UIImage imageWithColor:highlightedColor cornerRadius:cornerRadius];

[appearance setBackgroundImage:buttonImageNormal forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[appearance setBackgroundImage:buttonImageHightlighted forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

这将更新整个应用程序中的所有后退按钮和导航栏。

我使用了下面的代码来设置自定义导航返回按钮

UIImage *imgBack = [[UIImage imageNamed:@"nav_back.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(-6, 22, -6, 0)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:imgBack forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
下面的代码用于在导航栏上设置背景图像

UIImage *navBackgroundImage = [UIImage imageNamed:@"nav_bar.png"];
[[UINavigationBar appearance] setBackgroundImage:navBackgroundImage forBarMetrics:UIBarMetricsDefault];

我理解你的问题

当您实际推送一个
UIViewController
时,它将是现有
UINavigationController
的一部分。因此,
UINavigationBar
将保留。但是当您使用
ModalViewController
时,它只是另一个
UIViewController
类型的“添加”到现有的
UIViewController
。因此,
UINavigationBar
将不在那里

但是您可以从
xib
添加另一个
UINavigationBar
,并添加一个
UIButton
。但是不要直接添加
ui按钮
,如果这样做,它将自动转换为
ui按钮
,使其具有边框

因此,首先将一个普通的
ui按钮
拖动到
ui视图
(而不是导航栏)。将其更改为自定义,并使用
属性检查器向其添加
UIImage
。然后将该图像拖动到自定义创建的
UINavigationBar
。它会像我刚才尝试的那样工作。您可以看到下面附带的屏幕截图


值得解释的是,这将更新整个应用程序中的所有后退按钮和导航栏-可能是最佳答案。将UINavigationController分类,并修改其中的导航栏,并将该子类用作您的主要导航工具,实际上,您甚至无法从视图控制器访问导航栏,该视图控制器是使用模态方式显示的。所以你必须添加你自己的UINavigationBar(自定义)。。。这种类型的按钮操作在@property(弱,非原子)IBUIBarButtonim*sidebarButton不起作用;给出出口动作,但按钮动作不起作用如果要确保用户触摸按钮没有问题,则应分配一个新的UIView,其中包含您希望能够触摸的边界,然后将按钮添加到此视图,然后使用新分配的视图启动按钮