Изменение UIButton backgroundImage при выборе на UITabBar - PullRequest
1 голос
/ 25 сентября 2011

Итак, у меня есть UIButton в середине моего UITabBar, чтобы имитировать UITabBar от Instagram Вот код (код также можно взять из github здесь ).

@interface BaseViewController : UITabBarController
{
}

// Create a view controller and setup it's tab bar item with a title and image
-(UIViewController*) viewControllerWithTabTitle:(NSString*)title image:(UIImage*)image;

// Create a custom UIButton and add it to the center of our tab bar
-(void) addCenterButtonWithImage:(UIImage*)buttonImage highlightImage:(UIImage*)highlightImage;

@end


#import "BaseViewController.h"

@implementation BaseViewController



// Create a view controller and setup it's tab bar item with a title and image
-(UIViewController*) viewControllerWithTabTitle:(NSString*) title image:(UIImage*)image
{
  UIViewController* viewController = [[[UIViewController alloc] init] autorelease];
  viewController.tabBarItem = [[[UITabBarItem alloc] initWithTitle:title image:image tag:0] autorelease];
  return viewController;
}

// Create a custom UIButton and add it to the center of our tab bar
-(void) addCenterButtonWithImage:(UIImage*)buttonImage highlightImage:(UIImage*)highlightImage
{
  UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
  button.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin;
  button.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);
  [button setBackgroundImage:buttonImage forState:UIControlStateNormal];
  [button setBackgroundImage:highlightImage forState:UIControlStateHighlighted];
  [button setBackgroundImage:highlightImage forState:UIControlStateSelected];

  CGFloat heightDifference = buttonImage.size.height - self.tabBar.frame.size.height;
  if (heightDifference < 0)
    button.center = self.tabBar.center;
  else
  {
    CGPoint center = self.tabBar.center;
    center.y = center.y - heightDifference/2.0;
    button.center = center;
  }

  [self.view addSubview:button];
}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
  return YES;
}

@end

Если вы разветвляете ссылку на github выше и запускаете пример DailyBoothViewController, при нажатии средней кнопки она будет выделена.Теперь я хочу, чтобы подсветка сохранялась при нажатии кнопки, другими словами, я хочу изменить backgroundImage кнопки, когда состояние кнопки выбрано.Я сделал это с помощью кода, однако это не меняет изображение кнопки.Почему это?

1 Ответ

3 голосов
/ 26 сентября 2011

Согласно документации Apple для UIControlState: выбрано состояние элемента управления. Для многих элементов управления это состояние не влияет на поведение или внешний вид.Но другие подклассы (например, класс UISegmentedControl) могут иметь различный внешний вид в зависимости от их выбранного состояния.Вы можете получить и установить это значение через свойство selected .

И когда вы проверяете свойство selected , упоминается похожая вещь.Следовательно, для UIButton это свойство должно быть установлено явно в кнопке «Действие» кнопки.

Что касается кнопки, необходимо выполнить следующее:

    [button setBackgroundImage:highlightImage forState:(UIControlStateHighlighted|UIControlStateSelected)];
    [button setBackgroundImage:highlightImage forState:UIControlStateSelected];

И в методе действия этой кнопки введите следующий код:

    buttonState = !buttonState;
    [(UIButton *)sender setSelected:buttonState];

Где buttonStateдолжен быть BOOL iVar в соответствующем классе.В этом случае состояние кнопки переключает выбранное состояние.Следовательно, изображение для выбранного состояния устанавливается по желанию.

Также обратите внимание, что мы получаем выделенное изображение для (UIControlStateHighlighted | UIControlStateSelected), потому что при выборе кнопки это промежуточное состояние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...