Отключить подсветку на UIBarButtonItem - PullRequest
7 голосов
/ 06 мая 2011

Я пытаюсь использовать UIBarButtonItem, чтобы поместить заголовок на мою UIToolbar. Я использую простой стиль, и это выглядит хорошо, но я не могу заставить его перестать выделяться при прикосновении. Параметр «Показывать касание при выделении» недоступен для элементов панели кнопок. Есть ли быстрый и простой способ сделать это? Я пытаюсь сделать построение в построителе интерфейса, чтобы я мог видеть, что я делаю. Я бы предпочел не создавать панель инструментов в представлении загружается каждый раз.

Ответы [ 4 ]

3 голосов
/ 07 мая 2011

Свойство, ответственное за это, доступно в классе UIButton:

myButton.showsTouchWhenHighlighted = NO;

Вы можете получить доступ к этому (программно) в UIBarButtonItem, назначив UIButton свойству customView элемента кнопки панели и настроив кнопку. Вы также можете сделать это в Интерфейсном Разработчике: перетащите UIButton на UIToolbar, и он автоматически встроит его в UIBarButtonItem для вас - затем найдите флажок «Shows Touch On Highlight» под настройками кнопки.

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

2 голосов
/ 09 августа 2012

Я хотел найти решение, которое можно было бы использовать без каких-либо изменений в моей структуре XIB.
Самый очевидный и простой работал: подкласс UIBarButtonItem:

UITitleBarButtonItem.h:

//
//  UITitleBarButtonItem.m
//  Created by Guillaume Cerquant - MacMation on 09/08/12.
//

/*
 * A UIBarButtonItem that does not show any highlight on the touch
 * Drag and drop a normal UIBarButtonItem in your xib and set its subclass to UITitleBarButtonItem
 */
@interface UITitleBarButtonItem : UIBarButtonItem
@end

UITitleBarButtonItem.m:

#import "UITitleBarButtonItem.h"

@implementation UITitleBarButtonItem

// Only caring about UITitleBarButtonItem set up in Interface Builder. Update this class if you need to instantiate it from code

- (void) awakeFromNib {
    UIView *theView = [self valueForKey:@"view"];

    if ([theView respondsToSelector:@selector(setUserInteractionEnabled:)]) {
        theView.userInteractionEnabled = NO;
    }
}

@end

Протестировано на iOS 5, с которой нам пока не разрешено разговаривать.

1 голос
/ 13 декабря 2011

Альтернатива: используйте UIBarButtonItem в простом стиле и дополнительно закройте панель инструментов в соответствующей области UIView с чистым фоном.Представление потребляет касания и скрывает их от элемента панели кнопок.Убедитесь, что вы правильно установили маску авторазмера.

0 голосов
/ 01 марта 2018

Моим решением было отключить его и настроить titleAttributes для каждого UIControlState

let attributes: [NSAttributedStringKey: Any] = [
    .font: UIFont.boldSystemFont(ofSize: 16),
    .foregroundColor: UIColor.white
]

barButton.setTitleTextAttributes(attributes, for: .enabled)
barButton.setTitleTextAttributes(attributes, for: .disabled)
barButton.isEnabled = false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...