开发者

Custom search results button has weird behaviour in UISearchBar

I subclassed UISearchBar in order to set custom image to search results button the following way (.m file):

#import "CustomUISearchBar.h"

#define RGB(r, g, b) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1]
#define RGBA(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]

@implementation GipUISearchBar

- (void)layoutSubviews 
{    
    UITextField *searchField = nil;    
UIView *backGround = nil;
UIButton *cancelButton = nil;
NSUInteger numViews = [self.subviews count];    
for(int i = 0; i < numViews; i++) 
{       
    if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) 
    {           
        searchField = [self.subviews objectAtIndex:i];       
    }
    else if ([[self.subviews objectAtIndex:i] isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) 
    {       
        backGround = [self.subviews objectAtIndex:i];  
    }       
    else if ([[self.subviews objectAtIndex:i] isKindOfClass:[UIButton class]]) 
    {       
        cancelButton = [self.subviews objectAtIndex:i];                     [cancelButton setTintColor:RGB(22.0,38.0,111.0)];

    }
}    

if(!(searchField == nil)) 
{        
    searchField.layer.cornerRadius=15.0f;
    searchField.layer.masksToBounds=YES;
    searchField.layer.borderColor = [RGB(26.0,141.0,223.0)CGColor];
    searchField.layer.borderWidth = 2.0f;       

    UIImage *glassImage = [UIImage imageNamed: @"search_icon.png"];    
    UIImageView *iView = [[UIImageView alloc] initWithImage:glassImage];    
    searchField.leftView = iView;    
    [iView release];

    UIImage *historyImage = [UIImage imageNamed:@"history_button.png"];
    UIButton *historyButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [historyButton setBackgroundImage:historyImage forState:UIControlStateNormal];
    [historyButton setBac开发者_运维问答kgroundImage:historyImage forState:UIControlStateSelected];
    [historyButton setBackgroundImage:historyImage forState:UIControlStateDisabled];
    [historyButton setBackgroundImage:historyImage forState:UIControlStateHighlighted];

    historyButton.frame = CGRectMake(0, 
                                     0, 
                                     historyImage.size.width-3, 
                                     historyImage.size.height-3);
    historyButton.layer.borderColor = [RGBA(0.0,0.0,0.0,0.0)CGColor];
    historyButton.layer.borderWidth = 0.0f;

    searchField.rightView = historyButton;
}

if (!(backGround == nil))
    [backGround removeFromSuperview];



[super layoutSubviews]; 
}

The problem is when i touch inside search bar and it resizes i see this button being moved from left to right. How can i disable this behaviour?


try commenting below lines.

[super layoutSubviews];

Because it seems that you are overriding layout of UISearchBar by inheriting it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜