Как изменить изображения состояния для элементов панели вкладок?

Я создаю приложение Rubymotion и настраиваю tabBar. Мне удалось поместить пользовательское изображение в качестве фона панели вкладок, но теперь мне нужно установить отдельные изображения для каждой вкладки. Один, когда он нажат, и один, когда он не нажат.

Я следую руководству (для задачи-c) на NSScreencasts.com, и в примечаниях к шоу говорится, что я должен использовать этот код. Но когда я пробую это в Ruby (что я считаю правильным), я получаю сообщение об ошибке.

В Objective-C:

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Friends"
                                                        image:nil
                                                          tag:0];
        [self.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"tabbar-activity-selected.png"]
                      withFinishedUnselectedImage:[UIImage imageNamed:@"tabbar-activity.png"]];
    }
    return self;
}

Мой код Ruby:

class FirstController < UIViewController
  def viewDidLoad
    super

    view.backgroundColor = UIColor.whiteColor 

    self.tabBarItem = UITabBarItem.alloc.initWithTitle('Friends', image: nil, tag: 0)
    self.tabBarItem.setFinishedSelectedImage(UIImage.imageNamed('tabitem_selected.png'))
    self.tabBarItem.withFinishedUnselectedImage(UIImage.imageNamed('tabitem.png')) 
  end
end

Ошибка:

first_controller.rb:8:in `viewDidLoad': undefined method `setFinishedSelectedImage' for #<UITabBarItem:0x6b71670> (NoMethodError)
    from app_delegate.rb:7:in `application:didFinishLaunchingWithOptions:'
2012-11-16 14:45:56.924 custom_tabbar[45679:f803] *** Terminating app due to uncaught exception 'NoMethodError', reason: 'first_controller.rb:8:in `viewDidLoad': undefined method `setFinishedSelectedImage' for #<UITabBarItem:0x6b71670> (NoMethodError)

Также. Действительно ли правильно установить этот код в viewDidLoad?


person Jonathan Clark    schedule 16.11.2012    source источник


Ответы (1)


Эти строки в Objective-C являются одним методом:

[self.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"tabbar-activity-selected.png"]
              withFinishedUnselectedImage:[UIImage imageNamed:@"tabbar-activity.png"]];

Подпись:

- (void)setFinishedSelectedImage:(UIImage *)selectedImage 
     withFinishedUnselectedImage:(UIImage *)unselectedImage

Итак, для RubyMotion сигнатура метода:

setFinishedSelectedImage(image, withFinishedUnselectedImage:image)

Что преобразуется в это для вас:

self.tabBarItem.setFinishedSelectedImage(UIImage.imageNamed('tabitem_selected.png'),
                                         withFinishedUnselectedImage: UIImage.imageNamed('tabitem.png'))
person Dylan Markow    schedule 16.11.2012
comment
Спасибо, это было круто! - person Jonathan Clark; 16.11.2012
comment
Должен ли я настроить их в app_delegate? Или в контроллере? Какой из них правильный? Если я должен использовать контроллер, то какой метод? - person Jonathan Clark; 16.11.2012