2012-05-10 3 views
2

Я создал пользовательские кнопки навигации, как это:Кнопка навигации нажмите вне

UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    [button setImage:[UIImage imageNamed:@"some.png"] forState:UIControlStateNormal]; 
    .... 
    [[current navigationItem] setLeftBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:button]]; 

Где ток UIViewController * тип. Все работает нормально и кнопка создана, но она находится в зоне действия за пределами кнопки, очень близко к середине панели навигации. Можно ли ограничить область с кликами?

+0

Ваш вопрос знаком с [этой темой] (http://stackoverflow.com/questions/9338681/issue-with-button-on-the-left-side-of-the-uinavigation-bar). Apple сделала это для упрощения использования – dementiazz

ответ

0

Мое лучшее предположение, что кнопка установлена ​​в центр изображения, а не масштабирует ее, поэтому рамка кнопки слишком велика.

button.frame=CGRectMake(x,y,w,h)

Установите рамку на то, что вы хотите, активная область будет.

+0

Не будет работать, так как 'UIBarButtonItem' не является' UIView' и поэтому не имеет 'frame'. –

5

Я считаю, что это «особенность» iOS. Кнопки навигации слева и справа меньше минимальной зоны касания, разрешенной в iOS. В результате фактическая зона атаки намного больше, чем физическая навигационная панель. Включая только под панелью, и, как вы видите слева и справа от кнопки. Это позволяет быстро прикоснуться, не «взглянуть» туда, где вы касаетесь. Его одна из ключевых причин, по которой iPhone более естественна, чем большинство телефонов Android в первые дни.

0

Я изначально думал о подклассификации UIBarButtonItem и переопределить -touchInside:.

Это не работает, поскольку UIBarButtonItem не является подклассом UIView.
То, что вы пытаетесь достичь, поэтому невозможно без переопределения некоторых частных API.

Смежные вопросы