[ios] UIToolbar에서 왼쪽 화살표 버튼 (예 : UINavigationBar의 “뒤로”스타일 만들기)

에 ‘뒤로’왼쪽 화살표 베젤 버튼을 만들고 싶습니다 UIToolbar.

내가 알 수있는 한, 이들 중 하나를 얻는 유일한 방법 UINavigationController은 기본 설정을 유지하고 왼쪽 막대 항목에 하나를 사용하는 것입니다. 그러나 하나를로 만들 수있는 방법 UIBarButtonItem은 없으므로 표준 UIToolbar과 비슷하지만 표준으로 만들 수는 없습니다 UINavigationBar.

버튼 이미지로 수동으로 만들 수 있지만 소스 이미지를 어디에서나 찾을 수 없습니다. 알파 채널 모서리가 있으므로 스크린 샷 및 잘라내 기가 매우 다양한 결과를 얻지 못합니다.

사용하려는 모든 크기 및 색상 구성표에 대해 스크린 샷을 넘어서는 아이디어가 있습니까?

업데이트 : 질문을 피하고이 질문을하지 말고 사용 중임을 제안하십시오 UINavigationBar. 내 앱은 Instapaper Pro입니다. 공간을 절약하고 읽을 수있는 내용 영역을 최대화하기 위해 아래쪽 도구 모음 만 표시하고 왼쪽 화살표 모양의 뒤로 버튼을 아래쪽에 배치하고 싶습니다.

내가 이것을 할 필요가 없다고 말하는 것은 대답 이 아니며 분명히 현상금을받을 자격이 없습니다.



답변

http://www.teehanlax.com/blog/?p=447 에서 파생 된 다음 psd를 사용했습니다 .

http://www.chrisandtennille.com/pictures/backbutton.psd

그런 다음 툴바 항목의 customView 속성에서 사용하는 사용자 정의 UIView를 만들었습니다.

나를 위해 잘 작동합니다.


편집 : 바와 같이 지적 PrairieHippo는 , maralbjo는 다음을 사용하여, 간단한 코드는이 대답과 함께해야 트릭을 (번들 정의 이미지를 필요) 한 것으로 나타났다. 추가 코드는 다음과 같습니다.

// Creates a back button instead of default behaviour (displaying title of previous screen)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"]
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(backAction)];

tipsDetailViewController.navigationItem.leftBarButtonItem = backButton;
[backButton release];


답변

유니 코드 방법

유니 코드 문자를 사용하여 작업을 완료하는 것이 훨씬 쉽다고 생각합니다. 유니 코드 삼각형 또는 유니 코드 화살표를 검색하여 화살표를 살펴볼 수 있습니다 . iOS6부터 Apple은 문자를 테두리가있는 이모티콘 문자로 변경했습니다. 테두리를 비활성화하려면 0xFE0E 유니 코드 변형 선택기를 추가합니다 .

NSString *backArrowString = @"\U000025C0\U0000FE0E"; //BLACK LEFT-POINTING TRIANGLE PLUS VARIATION SELECTOR

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:backArrowString style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.leftButtonItem = backBarButtonItem;

코드 블록은 데모 용입니다. NSString을 허용하는 모든 버튼에서 작동합니다.

전체 문자 목록을 보려면 Google에서 유니 코드 문자 및 원하는 항목을 검색하십시오. 다음은 Black Left-Pointing Triangle 항목입니다 .

결과

결과


답변

경고 : iOS 6에서는 작동하지 않는다는보고가 있습니다. 이는 이전 버전의 OS에서만 작동 할 수 있습니다. 분명히 적어도 하나의 개발자 가이 트릭을 사용하여 앱을 거부했습니다 (댓글 참조). 자신의 책임하에 사용하십시오. 이미지를 사용하면 (위의 답변 참조) 더 안전한 솔루션 일 수 있습니다.

올바른 모양을 얻기 위해 sekr1t 버튼 유형 101을 사용하여 자신의 이미지 파일을 추가하지 않고도이 작업을 수행 할 수 있습니다. 나를 위해 속임수는 initWithCustomView을 만드는 데 사용할 수 있다는 것을 알았 습니다 BarButtonItem. 개인적으로이 아닌 동적 탐색 표시 줄에 필요 toolbar했지만 툴바로 테스트했지만 코드는 거의 동일합니다.

// create button
UIButton* backButton = [UIButton buttonWithType:101]; // left-pointing shape!
[backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Back" forState:UIControlStateNormal];

// create button item -- possible because UIButton subclasses UIView!
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

// add to toolbar, or to a navbar (you should only have one of these!)
[toolbar setItems:[NSArray arrayWithObject:backItem]];
navItem.leftBarButtonItem = backItem;

툴바 에서이 작업을 수행하는 경우 항목 설정 방법을 조정해야하지만 나머지 코드에 따라 다르며 독자의 연습으로 남겨 둡니다. : P이 샘플은 저에게 효과적이었습니다 (컴파일 및 실행).

Blah blah, HIG를 읽고, 문서화되지 않은 기능을 사용하지 마십시오. 지원되는 버튼 유형은 6 가지 뿐이며 그중 하나도 아닙니다.


답변

여기에 이미지 설명을 입력하십시오

우선 뒤로 버튼의 이미지를 찾아야합니다. iPhone에서 모든 그래픽을 추출하는 Extractor 라는 멋진 앱을 사용했습니다 . iOS7 에서는 호출 된 이미지를 검색 할 UINavigationBarBackIndicatorDefault수 있었고 검은 색조였습니다. 빨간 색조가 필요했기 때문에 Gimp를 사용하여 색상을 빨간색으로 변경했습니다.

편집하다:

그의 의견에서 btate 가 언급했듯이 이미지 편집기로 색상을 변경할 필요가 없습니다. 다음 코드는 트릭을 수행해야합니다.

imageView.tint = [UIColor redColor];
imageView.image = [[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

그런 다음 화살표가있는 imageView가 포함 된보기, 사용자 정의 텍스트가있는 레이블 및보기 상단에 작업 버튼이 있습니다. 그런 다음 간단한 애니메이션 (페이딩 및 번역)을 추가했습니다.

다음 코드는 애니메이션을 포함하여 뒤로 버튼의 동작을 시뮬레이션합니다.

-(void)viewWillAppear:(BOOL)animated{
        UIImageView *imageView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"]];
        [imageView setTintColor:[UIColor redColor]];
        UILabel *label=[[UILabel alloc] init];
        [label setTextColor:[UIColor redColor]];
        [label setText:@"Blog"];
        [label sizeToFit];

        int space=6;
        label.frame=CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+space, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, label.frame.size.width+imageView.frame.size.width+space, imageView.frame.size.height)];

        view.bounds=CGRectMake(view.bounds.origin.x+8, view.bounds.origin.y-1, view.bounds.size.width, view.bounds.size.height);
        [view addSubview:imageView];
        [view addSubview:label];

        UIButton *button=[[UIButton alloc] initWithFrame:view.frame];
        [button addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside];
        [view addSubview:button];

        [UIView animateWithDuration:0.33 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
            label.alpha = 0.0;
            CGRect orig=label.frame;
            label.frame=CGRectMake(label.frame.origin.x+25, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
            label.alpha = 1.0;
            label.frame=orig;
        } completion:nil];

        UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:view];
}

- (void) handleBack:(id)sender{
}

편집하다:

버튼을 추가하는 대신 제스처 인식기를 사용하는 것이 더 나은 방법이라고 생각합니다.

UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleBack:)];
[view addGestureRecognizer:tap];
[view setUserInteractionEnabled:YES];


답변

이것이 작동하는지 확실하지 않지만 UINavigationController기본 설정을 사용하여 버튼을 만들고 탐색 컨트롤러의 하위보기 계층에서 버튼을 찾아서 호출 removeFromSuperview하고 탐색 컨트롤러를 파괴 한 다음 버튼을 다음과 같이 추가 할 수 있습니다 툴바의 하위보기. 프로세스 중에 할당 해제되는 것을 피하기 위해 retain호출하기 전에 removeFromSuperview(및 release도구 모음의 하위보기로 추가 한 후에) 버튼과 버튼이 필요할 수도 있습니다 .


답변

화살표가있는 UIButton을 iOS 7 시스템의 뒤로 화살표에 가깝게 만들려면 (나는 디자이너가 아닙니다.)

표준:

표준 시스템 뒤로 화살표

애플 SD 고딕 네오

Apple SD Gothic Neo <문자

Xcode에서 :

  • 버튼의 제목 값 필드 (또는 텍스트 내용이있는 다른보기 / 컨트롤)에 중점을 둡니다.
  • 편집-> 특수 문자를 엽니 다
  • 괄호 그룹을 선택하고 ‘<‘문자를 두 번 클릭하십시오.
  • 글꼴을 다음과 같이 변경하십시오. Apple SD Gothic Neo, 원하는 크기의 일반 (예 : 20)
  • 당신이 원하는대로 색상을 변경

iOS 7에서 Back-like arrow에 대한 @staticVoidMan의 답변 참조


답변

뒤로 화살표

이미지 파일을 신경 쓰지 않으려면 다음 코드를 사용하여 UIView 서브 클래스에 화살표 모양을 그릴 수 있습니다.

- (void)drawRect:(CGRect)rect {
    float width = rect.size.width;
    float height = rect.size.height;
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextBeginPath(context);
    CGContextMoveToPoint(context, width * 5.0/6.0, height * 0.0/10.0);
    CGContextAddLineToPoint(context, width * 0.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 5.0/6.0, height * 10.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 9.0/10.0);
    CGContextAddLineToPoint(context, width * 2.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 1.0/10.0);
    CGContextClosePath(context);

    CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextFillPath(context);
}

여기서 화살표보기는 너비 6.0과 높이 10.0에 비례합니다.