2011-11-20 53 views

回答

1

這是怎麼回事通常會做:

UIImage *buttonImage = [UIImage imageNamed:@"myImage.png"];  
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 

[myButton setImage:buttonImage forState:UIControlStateNormal]; 
[myButton setImage:buttonImage forState:UIControlStateHighlighted]; 

UIBarButtonItem *myBtnItem = [[UIBarButtonItem alloc] initWithCustomView:myButton]; 

[myButton addTarget:self action:@selector(someSelector:) forControlEvents:UIControlEventTouchUpInside]; 
[myBtn setFrame:CGRectMake(someX, someY, someWidth, someHeight)]; 
[self.toolbar setItems:[NSArray arrayWithObjects:someBtnItemOne, myBtnItem, someBtnItemThree, nil]]; 
[myBtnItem release]; 

如果這並不幫助,可以請你告訴您使用初始化工具欄和按鈕項目的代碼?

+0

我使用Interface Builder來構建我的工具欄...問題:這樣做的利弊建造他們的代碼視圖,因爲Interface Builder的太有限? – JoJo

+0

@Jojo如果你想微調某些東西,那麼最好是以編程方式創建它,而不是在IB中。 IB很適合簡單的默認視圖和子視圖,但我會建議至少在沒有它的情況下構建一些東西;它是學習和真正理解IntrfceBldr「幕後」發生的最好方法。 「從UIBarButtonItem'繼承的」 – chown

1

這裏有一類我創建了一個從繼承的UIBarButtonItem這是基於圖像:

#import "XXBarButtonImageItem.h" 

    @implementation XXBarButtonImageItem 

    - (id)initWithFrame:(CGRect)frame 
        image:(UIImage*)image 
     backgroundImage:(UIImage*)bgImage 
    { 
     _button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [_button setFrame:frame]; 

     self = [super initWithCustomView:_button]; 
     if (self) 
     { 
      if (image) 
       [_button setImage:image forState:UIControlStateNormal]; 

      if (bgImage) 
       [_button setBackgroundImage:bgImage forState:UIControlStateNormal]; 

     } 
     return self;  
    } 

    - (id)initWithFrame:(CGRect)frame 
        image:(UIImage*)image 
     backgroundImage:(UIImage*)bgImage 
       target:(id)target 
       action:(SEL)selector 
    { 
     self = [self initWithFrame:frame image:image backgroundImage:bgImage]; 
     if (self) 
     { 
      [_button addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside]; 
     } 

     return self; 
    } 

    - (void)dealloc 
    { 
     [super dealloc]; 
     [_button release]; 
    } 

    - (void)addTarget:(id)target action:(SEL)selector forControlEvents:(UIControlEvents)controlEvents 
    { 
     [_button addTarget:target action:selector forControlEvents:controlEvents]; 
    } 

    - (void)setImage:(UIImage *)image forState:(UIControlState)state 
    { 
     [_button setImage:image forState:state]; 
    } 

    - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state 
    { 
     [_button setImage:image forState:state]; 
    } 

    @end 
+0

「與」可以傳遞給接受'UIBarButtonItem'「的任何東西是同義的,但是無論如何,這是一個漂亮的想法!爲了方便起見,您甚至可以將其設爲類別。 – chown

+0

:)同意 - 我會編輯 – bryanmac

+0

頭文件在哪裏? (我是一個noob) – JoJo