2011-11-20 120 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