У кнопки пользовательских результатов поиска странное поведение в UISearchBar - PullRequest
0 голосов
/ 02 июля 2011

Я вложил в UISearchBar субкласс, чтобы настроить пользовательское изображение для кнопки результатов поиска следующим образом (файл .m):

#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 setBackgroundImage: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]; 
}

Проблема в том, что когда я касаюсь внутри панели поиска, и она меняет размеры, я вижу, как эта кнопка перемещается слева направо. Как я могу отключить это поведение?

1 Ответ

0 голосов
/ 02 июля 2011

попробуйте комментировать ниже строк.

[super layoutSubviews];

Поскольку кажется, что вы переопределяете макет UISearchBar, наследуя его.

...