2013-06-07 3 views
7

투명도가있는 png 만 사용하는 사용자 지정 UIBarbuttonItem을 만들려고하므로 아이콘 만 단추로 사용하려고합니다. 버튼 이미지를 설정하려고 할 때 배경을 흰색으로 설정하고 스타일을 보통으로 설정합니다. 그 주위에는 여전히 내면의 그림자와 검은 색 테두리가 있습니다.사용자 지정 UIBarButtonItem

무엇을 제공합니까?

enter image description here

나는 아래의 코드를 시도하고 그것은 여전히 ​​주위에 검은 색 테두리를 둔다. 나는 아직도 주위에 검은 색 테두리가 위의 코드로, 버튼 모달 SEGUE을 할 경우 내가 눈치 무엇

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; 

이지만, 내가 푸시 할 경우 그렇지 않습니다 SEGUE? WTF?

답변

7

나는이 문제를 이해했다.

실제로 UIViewController을 누르면 UINavigationController의 일부가됩니다. 따라서 UINavigationBar은 그대로 유지됩니다. 하지만 ModalViewController을 사용하면 UIViewController에 "UIViewController"이 추가되었습니다. 따라서 UINavigationBar은 표시되지 않습니다.

xib에서 UINavigationBar을 추가하고 UIButton을 추가 할 수 있습니다. 그러나 직접 UIButton을 추가하지 않으면 자동으로 UIBarButton으로 연결되어 경계선이 지정됩니다.

먼저 UIButton을 내비게이션 막대가 아닌 UIView으로 드래그하십시오. 사용자 정의로 변경하고 Attribute Inspector을 사용하여 UIImage을 추가하십시오. 그런 다음 해당 이미지를 UINavigationBar이라는 사용자 정의로 드래그하십시오. 내가 지금 시도한 것처럼 작동 할 것이다. 아래 첨부 된 스크린 샷을 볼 수 있습니다.

enter image description here

+0

사실 모달 방법을 사용하여 제공된보기 컨트롤러에서 탐색 모음에 액세스 할 수도 없습니다. 따라서 사용자 고유의 UINavigationBar (사용자 정의)를 추가해야합니다. –

+0

귀하의 단계를 밟았습니다 ...이 단추 동작 유형이 작동하지 않습니다 @property (weak, nonatomic) IBOutlet UIBarButtonItem * sidebarButton; 아울렛 액션을 제공하지만 버튼 동작이 작동하지 않습니다. – San

2

에 한번 사용 [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; 
0

당신은 버튼 배경사용자 정의 및 아이콘 이미지에있는 버튼 유형을 설정해야합니다 ..

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 
15

를이 코드를 사용해보십시오. 예제 코드 :

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이 버튼을 설정 단지

기본적으로 UIAppearance을 통해 전체 UI를 병합하여

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:button]; 
self.navigationItem.leftBarButtonItem = barButton; 
+1

을 사용하면 사용자가 그와 함께, 당신은 당신이 접촉 할 수 있도록하려면 경계로 새로운 UIView의를 할당해야을 버튼을 터치 문제가 없습니다 있는지 확인하려면, 다음이보기에 단추를 추가 –

1

나는 개인적으로 FlatUIKit's 같은 접근 방식, 당신이 ' d를 좋아하십시오 :

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]; 
4

이렇게하면 앱 전체의 모든 뒤로 버튼과 탐색 바가 업데이트됩니다.

나는 버튼

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]; 
+1

대신에 새로 할당 된 뷰를 사용하여 barButton을 시작하십시오. 이는 앱 전체에서 모든 뒤로 버튼과 탐색 막대를 업데이트한다는 설명이 유용 할 것입니다. –

+0

하위 클래스 UINavigationController 및 탐색 모음을 수정하고 기본 탐색 도구로 하위 클래스를 사용하십시오. –

관련 문제