에 ‘뒤로’왼쪽 화살표 베젤 버튼을 만들고 싶습니다 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 고딕 네오
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에 비례합니다.