У меня есть UINavigationBar с пользовательским UIBarButtonItem (который использует UIButton в качестве своего пользовательского представления). Проблема в том, что активная область пользовательской кнопки слишком велика, если я нажму не менее 40 пикселей за пределами кнопки, это все равно будет зарегистрировано как нажатие на кнопку. Это приводит к случайным нажатиям. Как я могу уменьшить активную область на этих кнопках?
Меньшая активная область для пользовательского UIBarButtonItem
comment
Просто упомянем об этом (должно быть действительно очевидно из вопроса, но, по-видимому, это не так): речь идет не об уменьшении размера самой кнопки. Речь идет об уменьшении области, которая реагирует на нажатия кнопок. Обычно эта область совпадает с размером кнопки, за исключением элементов панели кнопок, где активная область несколько больше самой панели, чтобы ее было легче нажимать.
- person mrueg   schedule 28.12.2010
Ответы (3)
Я тоже заметил эту странность. Я обнаружил, что использование контейнера 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];
person
just.jimmy
schedule
14.01.2013
Я думаю, вы не изменили размер пользовательской кнопки... Попробуйте сделать это... В конструкторе интерфейсов выберите кнопку, активную область которой вы хотите уменьшить, а затем нажмите "Command+3" или "tools --> Инспектор размера» в том, что уменьшите значения «W» и «H»... это сделает настраиваемую кнопку меньше, и поэтому активная область также уменьшится...
~ Равираджа
person
Raviraja
schedule
08.07.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];
person
Joseph Stein
schedule
09.07.2010