2014-08-27 3 views
1

iBooks 앱 스타일과 같은 삼각형의 아이콘으로 버튼을 만들고 싶었습니다. I want make this button (in iBooks app)삼각형의 아이콘으로 버튼을 만들고 싶습니다.

버튼을 누르면 목록 화면이 표시됩니다. 그런 다음 목록을 선택하면 단추의 설명이 선택한 텍스트와 삼각형 아이콘이됩니다. 아이콘은 항상 오른쪽입니다.

[self.button setImage:[UIImage imageNamed:@"arrow-down"] forState:UIControlStateNormal]; 
CGFloat titleWidth = self.button.titleLabel.bounds.size.width; 
CGFloat imageWidth = self.button.imageView.bounds.size.width; 
// Title is left Image is right 
self.button.titleEdgeInsets = UIEdgeInsetsMake(0, -imageWidth, 0, imageWidth); 
self.button.imageEdgeInsets = UIEdgeInsetsMake(0, titleWidth, 0, -titleWidth); 

그래서 샘플 앱을 만들려고했습니다.

https://github.com/kawai-hiroyuki/LikeIBooksDropDownMenu

그러나, 아이콘의 위치는 절대적으로 이탈합니다. 오른쪽에 설치하는 방법은 항상 아이콘입니다.

+0

customButton 가진 - 이미지 –

답변

7

UIButton을 서브 클래 싱하고 setTitle:forState:을 오버라이드하여 유니 코드에 공간을 추가 한 다음 아래 화살표를 사용하여이 작업을 매우 쉽게 수행했습니다. 제목을 설정하면 화살표가 자동으로 올바른 글꼴로 추가됩니다. 당신은 예 또는 나 또한 내가 this을 건의 할 것입니다 드롭 다운 메뉴 다만 완전한 서브 클래스를 원하는 경우 또한 "매우 난 ... 이름 ▼"

- (void)setTitle:(NSString *)title forState:(UIControlState)state 
{ 
    title = [title stringByAppendingString:@" \u25BE"]; //Unicode - Small down arrow 
    [super setTitle:title forState:state]; 
    [self sizeToFit]; 
} 

으로 매우 긴 이름을 처리합니다. 면책 조항 : 내가 작성했습니다.

+0

당신의 drawRect 방법에 넣고 나는이 솔루션은 좋은 생각합니다. 그러나 나는 또한 외모가 같지 않다고 생각합니다. – user3811123

+0

@ "\ u25BE"는 위의 그림에서 유니 코드 삼각형이 될 것으로 생각됩니다. (개인적으로 나는 더 큰 것을 좋아한다) – Kevin

+0

@ "\ u25BE"는 좋다! iBook과 매우 비슷합니다. – user3811123

1

당신은 UIBezierPath 이것을 그릴 수, 당신의 UIButton 서브 클래스

static const float kTriangleHeight = 8.0f; 
static const float kTriangleWidth = 8.0f; 

UIBezierPath *trianglePath = [UIBezierPath bezierPath]; 
[trianglePath moveToPoint:CGPointMake(self.frame.size.width - kTriangleWidth - 3.0f, (self.frame.size.height/2) - kTriangleHeight/2)]; 
[trianglePath addLineToPoint:CGPointMake(self.frame.size.width - kTriangleWidth - 3.0f, (self.frame.size.height/2) + kTriangleHeight/2)]; 
[trianglePath addLineToPoint:CGPointMake(self.frame.size.width - 3.0f, self.frame.size.height/2)]; 
[trianglePath closePath]; 
[[UIColor blueColor] set]; 
[trianglePath fill]; 
+0

나는 당신의 코드를 시도했다. 하지만 "lineToPoint"에서 오류를 제거 할 수는 없었습니다. – user3811123

+0

어떤 오류가 발생합니까? – Jasper

+1

'addLineToPoint'가 아닌가요? 'lineToPoint'는'NSBezierPath' 메소드입니다. – Rob

관련 문제