Rubymotion: более общий способ установки свойств navigationBar.

Есть ли более общий способ установить свойства navigationBar? Я хотел бы установить полупрозрачное значение false и изображение в качестве заголовка. Что странно для меня, так это то, что я могу установить tintColor и barTintColor в app_delegate.rb, но не другие свойства. Немного странно запускать этот код на всех моих экранах.

Я использую последнюю версию Rubymotion и использую жемчужину продвижения для создания своих экранов.

class AppDelegate < ProMotion::Delegate
  include PM::Styling

  def on_load(app, options)
    set_appearance_defaults
  end

  def set_appearance_defaults
    UINavigationBar.appearance.tintColor = UIColor.whiteColor
    UINavigationBar.appearance.barTintColor = hex_color("3B4044")
  end

end

class LoginScreen < PM::Screen

  def on_init
    self.navigationItem.titleView = UIImageView.alloc.initWithImage(UIImage.imageNamed("logos/navigation_bar_logo.png"))
    self.navigationController.navigationBar.translucent = false
  end

end

person Michael Koper    schedule 03.12.2013    source источник
comment
Вы всегда можете создать подкласс UINavigationController, если вы собираетесь использовать одну и ту же панель навигации во всем приложении или, действительно, более одного раза.   -  person FluffyJack    schedule 11.12.2013
comment
Еще одна вещь, хотя (извините, это UX) не рекомендуется размещать логотип на панели навигации.   -  person FluffyJack    schedule 11.12.2013
comment
Или подкласс PM::Screen.   -  person FluffyJack    schedule 11.12.2013


Ответы (1)


Добавил несколько комментариев выше, но вот фактический ответ, который вы можете попробовать сами, он довольно гибкий.

# app/mk_screen.rb
class MKScreen < PM::Screen
  def useLogoNavbar
    self.navigationItem.titleView = UIImageView.alloc.initWithImage(UIImage.imageNamed("logos/navigation_bar_logo.png"))
    self.navigationController.navigationBar.translucent = false
  end
end

# app/login_screen.rb
class LoginScreen < MKScreen
  useLogoNavbar
end

Теперь вам все еще нужно вызывать метод, но он, по крайней мере, дает вам возможность использовать его или нет. Это также означает, что вы можете использовать MKScreen для размещения небольшого общего кода для ваших контроллеров представления.

person FluffyJack    schedule 11.12.2013