위 화면은 UINavigationBar 를 보여주고 있습니다.
오른쪽을 보면 버튼이 3개가 붙어 있습니다.
어떻게 한것일까요? 저도 어떻게 할 수 있을까 무척 고민했습니다.
일단 저기에 뭔가 붙이려면 UIViewController에서 self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]init...]autorelase]을 설정해주면 됩니다.

- initWithBarButtonSystemItem: target: action:
- initWithImage: style: target: action:
- initWithTitle: style: target: action:

위 함수중 1개를 선택해서 객체를 생성할 수 있는데 전부 1개만 넣을 수 있습니다. 2개 이상은 안되죠. 다행히도 아래와 같은 함수가 있습니다.

-initWithCustomView:

이 함수를 이용하면 UIView를 확장한 객체만 뭐든지 들어갈 수 있지요. 당연하지만 앞의 3개의 함수와 달리 버튼을 눌렀을때 액션을 취할 수는 없습니다. 이것은 커스터마이징 해야할 겁니다.

그럼 처음 위 Navigation Bar에서 보여준것처럼 하게 하려면 결국 UIView로 하면 됩니다.
하지만 UIView를 이용하면 위치를 일일히 지정하는 번거로움이 있어서 이런 경우에는 UIToolBar를 사용하면 되겠죠. 즉 아래처럼 하면 됩니다.

self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc]initWithCustomView:myToolBar]autorelease];

결과는 예~ 잘등록됩니다. ^^

하..지..만... 요래 됩니다.




당연하겠죠. UIToolBar 기본배경이 원래 저거니깐요.

이제 배경색만 지우면 되겠지 싶어
myToolBar.opaque = NO 도 해보고...
myToolBar.translucnet = YES 도 해보고...
myToolBar.backgroundColor = [UIColor clearColor] 도 해보고
myToolBar.tintColor = [UIColor clearColor] 도 해보고....

별짓을 다해봤지만.... 배경색이 지워지지 않더군요. 인터넷 뒤져봐도 투명으로 만드는 방법 말고는 설명된 것을 찾기가 어렵더군요. 그냥 UIView 확장해서 만들까 하지만 오기가 생겼습니다.

이리저리 찾아보다가.... 방법을 찾았습니다.

- (void) drawRect:(CGRect)rect {}

결국 위 함수를 오버라이드 해서 내부에 아무것도 정의하지 않으면 된다는 사실을 깨달았습니다.
말그대로 UIToolBar를 확장해서 아래처럼 아무 코드도 넣지 않으면 됩니다.

- (void) drawRect:(CGRect)rect {
    //이것으로 배경을 그리지 않는다.
}

그리고 내부적으로 아래와 같은 코드가 들어가야 합니다. init함수에 아래 코드를 넣으면 완성됩니다.

self.translucent= YES; 


저 버튼들을 눌렀을때 action은 어떻게 처리하냐고요? 그야 방법은 아주 많겠죠? 그건 나름 연구해보시길.... ^^

글쓴이 : 지돌스타(http://blog.jidolstar.com/728)

+ Recent posts