Меньшая активная область для пользовательского UIBarButtonItem - PullRequest
5 голосов
/ 03 марта 2010

У меня есть UINavigationBar с пользовательским UIBarButtonItem (который использует UIButton в качестве своего пользовательского представления). Проблема в том, что активная область пользовательской кнопки слишком велика, если я нажимаю не менее 40 пикселей за пределами кнопки, она все равно регистрируется как нажатие на кнопку. Это приводит к случайным кранам. Как я могу уменьшить активную область на этих кнопках?

Ответы [ 3 ]

6 голосов
/ 14 января 2013

Я тоже заметил эту странность. Я обнаружил, что использование контейнера UIView исправляет это. Например:

UIButton *menuButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[menuButton addTarget:self action:@selector(revealMenu:) forControlEvents:UIControlEventTouchUpInside];
[menuButton setImage:[UIImage imageNamed:@"menuIcon"] forState:UIControlStateNormal];
UIView *menuButtonContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)];
[menuButtonContainer addSubview:menuButton];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:menuButtonContainer];
0 голосов
/ 09 июля 2010

Вы добавляете кнопку через Interface Builder или делаете это программно? В любом случае, вы можете использовать эту строку кода, чтобы установить границы изображения:

yourButton.bounds = CGRectMake( 0, 0, yourImage.size.width, yourImage.size.height );  

Если вам нужен полный пример, вот тот, который я использовал в одном из моих приложений:

    UIImage *image = [UIImage imageNamed:@"audio-off.png"];
    UIButton *myMuteButton = [UIButton buttonWithType:UIButtonTypeCustom];
    myMuteButton.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );    
    [myMuteButton setImage:image forState:UIControlStateNormal];
    [myMuteButton addTarget:self action:@selector(mute) forControlEvents:UIControlEventTouchUpInside];    
    UIBarButtonItem *myMuteBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myMuteButton];   
    navBar.leftBarButtonItem = myMuteBarButtonItem;
    [myMuteBarButtonItem release];
0 голосов
/ 08 июля 2010

Я думаю, вы не изменили размер пользовательской кнопки ... Попробуйте сделать это ... В Интерфейсном мастере выберите кнопку, которую вы хотите уменьшить активную область, а затем нажмите «Command + 3» или «Инструменты -> Инспектор размеров», чтобы уменьшить значения «W» и «H» ... это уменьшит пользовательскую кнопку и уменьшит активную область ...

~ Raviraja

...