Как мне сделать NavigationItem UIBarButtonItems визуально подтвердить прикосновение? - PullRequest
1 голос
/ 06 сентября 2010

У меня есть UINavigationController, где я инициализирую панель навигации как таковую (используя MonoTouch):

NavigationBar.BarStyle = UIBarStyle.Black;
NavigationBar.TintColor = UIColor.Black;

На контроллере UIViewController, который я впоследствии нажимаю на контроллер навигации, я добавляю кнопку как таковую:

NavigationItem.RightBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Add, (s, e) => HandleAddItem());

Однако, когда я касаюсь кнопки, она не меняет цвет / оттенок (т.е. анимация), чтобы показать, что она была затронута. Подобные элементы UIBarButtonItems, добавленные в созданный вручную UINavigationBar на другом контроллере представления (обычный UIVIewController), анимируются, как и следовало ожидать.

Как заставить кнопки панели навигации «мигать», когда они находятся на контроллере UIViewController, который был помещен в контроллер UINavigationController?

1 Ответ

3 голосов
/ 06 сентября 2010

Я обнаружил, что как только вы измените значения barStyle и tintColor на UINavigationBar, очень вероятно, что выделенное состояние кнопки будет не отличаться от состояния по умолчанию.Я считаю, что лучший способ обойти это - использовать UIBarButtonItem, созданный из пользовательского представления.

UIImage *bgImage = [UIImage imageNamed:@"button-normal.png"];
bgImage = [bgImage stretchableImageWithLeftCapWidth:6.0 topCapHeight:0.0];
UIImage *bgImageHighlighted = [UIImage imageNamed:@"button-highlighted.png"];
bgImageHighlighted = [bgImageHighlighted stretchableImageWithLeftCapWidth:6.0 topCapHeight:0.0];

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
[myButton setBackgroundImage:bgImage forState:UIControlStateNormal];
[myButton setBackgroundImage:bgImageHighlighted forState:UIControlStateHighlighted];

UIBarButtonItem *myItem = [[UIBarButtonItem alloc] initWithCustomView:myButton];

Это немного болезненно, особенно когда ваша кнопка использует изображение вместо заголовка.Я бы определенно рекомендовал отправить отчет об ошибке в Apple по этому поводу.

В вашей конкретной ситуации может быть лучше, если установить barStyle на UIBarStyleBlack и оставить свойство tintColor в покое.Мне также повезло, только указав tintColor и оставив barStyle равным UIBarStyleDefault, пока tintColor не черный.В общем, черный цвет tintColor работает не очень хорошо.

...