3

UIToolbar의 인스턴스와 버튼을 추가했습니다. 각 버튼은 UIBarButtonItem의 클래스에 속합니다.배경 이미지로 UIBarbuttonitem 사용자 정의하기

나의 요구 사항은 각 버튼마다 사용자 정의 된 레이아웃이 있으며, Apple에서 제공하는 기본 버튼 스타일을 사용하고 싶지 않습니다. 그래서 나는 Interface Builder (Plain, Bordered, Done)에서 3 가지 옵션을 가졌습니다. 평야 스타일을 선택하고 막대 항목 -> 이미지 아래에서 배경색을 백 그라운으로 추가 할 이미지를 선택했습니다.

하지만 일반 옵션을 사용하면 테두리가 조금 더 가까워지고 완료는 아무 곳에도 없지만 여전히 흰색 윤곽선으로 이미지가 표시됩니다. 어쨌든 단추의 이미지가 추가되고 정확히 그대로 나타납니다. 그것은 UIButton을 사용하는 동안 매우 간단한 작업입니다. 방금 UIButton에 대한 속성 검사기에서 이미지 옵션을 사용하고 원하는 이미지를 선택했습니다. 하지만 여기 UIBarButtonitem을 사용하는 동안 전혀 작동하지 않습니다. 이 UIBarButtonItem가있는 UIView - 서브 클래스가 아닌 것을,

감사 Taimur

여기

답변

24

Taimur,

나는 당신이 치고있는 것과 같은 문제에 부딪쳤다. Google의 디자이너는 앱의 탐색 바에있는 버튼을 맞춤 설정했습니다.

+ (UIBarButtonItem *)createSquareBarButtonItemWithTitle:(NSString *)t target:(id)tgt action:(SEL)a 
{ 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    // Since the buttons can be any width we use a thin image with a stretchable center point 
    UIImage *buttonImage = [[UIImage imageNamed:@"SquareButton.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0]; 
    UIImage *buttonPressedImage = [[UIImage imageNamed:@"SquareButton_pressed.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0]; 

    [[button titleLabel] setFont:[UIFont boldSystemFontOfSize:12.0]]; 
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [button setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; 
    [button setTitleShadowColor:[UIColor colorWithWhite:1.0 alpha:0.7] forState:UIControlStateNormal]; 
    [button setTitleShadowColor:[UIColor clearColor] forState:UIControlStateHighlighted]; 
    [[button titleLabel] setShadowOffset:CGSizeMake(0.0, 1.0)]; 

    CGRect buttonFrame = [button frame]; 
    buttonFrame.size.width = [t sizeWithFont:[UIFont boldSystemFontOfSize:12.0]].width + 24.0; 
    buttonFrame.size.height = buttonImage.size.height; 
    [button setFrame:buttonFrame]; 

    [button setBackgroundImage:buttonImage forState:UIControlStateNormal]; 
    [button setBackgroundImage:buttonPressedImage forState:UIControlStateHighlighted]; 

    [button setTitle:t forState:UIControlStateNormal]; 

    [button addTarget:tgt action:a forControlEvents:UIControlEventTouchUpInside]; 

    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

    return [buttonItem autorelease]; 
} 
+0

고마워요. 방금 ​​코드를 사용하려고 시도했는데 런타임에 오류가 발생했습니다. 그걸 어떻게 부르죠. UIBarButtonItem * HomeButton = [self createSquareBarButtonItemWithTitle : @ "집"대상 : 자기 행동 : @selector (pressHomeButton :)]; –

+0

나는 전체 코드를 동일한 함수로 작성했다. 그리고 그것의 지금 일하십시오. 불쌍한 프로그래밍으로 코드를 5 번 복사하고 같은 기능으로 붙여 넣어야합니다. 하지만 내가 함수를 호출 할 때 응용 프로그램이 충돌했습니다. 친절하게도 내가 함수를 호출하는 실수를 저지르고 있다면 나를 인도한다. –

+0

그것은 클래스 메소드 (앞의'+'에 주목) 때문에 추락했으며 인스턴스에서 호출하고 있습니다. 호출은 'UIBarButtonItem * HomeButton = [[self class] createSquareBarButtonItemWithTitle : @ "집"대상 : 자기 행동 : @selector (pressHomeButton :)];'이어야합니다. 또는 다른 곳에서 호출하는 경우 '[self class]'대신 클래스의 이름을 지정하면됩니다. –

3

문제를 표시하는 방법을 이입니다. 는 나도 같은 문제를했고,이 솔루션은 매우 간단하다 :

나중에 그 initWithCustomView: 방법을 사용하고 매개 변수로있는 UIButton 개체를 통과하는 UIBarButtonItem의 인스턴스를 생성, 사용자 정의 배경 이미지와 함께있는 UIButton 개체를 만듭니다.

희망을 부탁드립니다.

+0

감사합니다. 불행히도 앱이 다운되었습니다. UIButton * BackButton = [UIButton alloc]; [BackButton setImage : [UIImage imageNamed : @ "Home_icon.png"] forState : UIControlStateNormal]; \t homeButton의 UIBarButtonItem * = [UIBarButtonItem ALLOC] initWithCustomView : BACK 버튼 대상 : 자기 조치 : @ 선택기 (pressHomeButton :)]; –

+0

hmmm thats 꽤 많이 내가하는 것도. 나에게 콘솔 출력물을 가지고 있니? – samsam

+0

@TaimurAjmal 아마도 init 메소드를 호출하지 않았을 것입니다.UIButton * BackButton = [[UIButton alloc] init]; – igrek

2

드래그 앤 IB에서 측면 UIToolBar을있는 UIButton을 삭제 한 후 포맷 및 지정 : 여기에 우리가 필요로하는 UIBarButtonItems를 생성하기 위해 쓴 유틸리티 메소드는, 당신은 당신의 필요에 맞게 수정할 수 있어야한다 선택기를 UIToolBar로 드래그하십시오.,. ,, 이것은 나를 위해 일했습니다 !!

+0

완벽하게 작동합니다! –

0

탐색 표시 줄의 UIBarButton과 동일한 문제가있었습니다. kaar3k에서 제공하는 솔루션을 사용했습니다. 감사합니다 kaar3k. UIButton을 Storybaord의 NavBar 밖으로 드래그 앤 드롭 한 다음 선택기를 지정하고 NavBar로 드래그하십시오 !!

관련 문제