如何从 UIBarButtonItem 中删除样式?

Posted

技术标签:

【中文标题】如何从 UIBarButtonItem 中删除样式?【英文标题】:How do you remove the style from a UIBarButtonItem? 【发布时间】:2011-11-20 06:02:27 【问题描述】:

UIToolbar 中使用UIBarButtonItem 中的自定义图形时,程序会自动将图形变为白色并应用内阴影。如何防止这种自动样式设置并逐字使用我的自定义图形?

【问题讨论】:

【参考方案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];

如果这没有帮助,能否请您显示用于初始化工具栏和按钮项的代码?

【讨论】:

我使用 Interface Builder 来构建我的工具栏...问题:专业人士是否使用代码构建他们的视图,因为 Interface Builder 太有限了? @Jojo 如果您想微调某些东西,那么最好以编程方式而不是在 IB 中创建它。 IB 非常适合简单的默认视图和子视图,但我建议至少在没有它的情况下构建一些东西;这是学习和真正了解 IntrfceBldr“幕后”发生的事情的最佳方式。【参考方案2】:

这是我创建的一个类,它继承自基于图像的 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

【讨论】:

"inherits from UIBarButtonItem" 是“可以传递给任何接受UIBarButtonItem 的东西”的同义词,但无论如何,这是一个绝妙的主意!为方便起见,您甚至可以将其设为一个类别。 头文件在哪里? (我是菜鸟)

以上是关于如何从 UIBarButtonItem 中删除样式?的主要内容,如果未能解决你的问题,请参考以下文章

iphone - 如何在没有 UIToolBar 的情况下使用 UIBarButtonItem 样式

如何删除左 UIBarButtonItem 的填充?

如何在IOS中重新加载UIBarButtonItem

更改 UIBarButtonItem 的 UIToolbar 阴影颜色

iOS:删除左侧 uibarbuttonitem 之间的间隙

带有“更多”按钮样式的 UIBarButtonItem