Class: Teacup::Appearance
- Inherits:
-
Stylesheet
- Object
- Stylesheet
- Teacup::Appearance
- Defined in:
- lib/teacup-ios/appearance.rb
Overview
An interface to style views using the UIAppearance protocol.
Work similarly as the Stylesheet class.
Teacup::Appearance.new do
style UINavigationBar,
tintColor: UIColor.colorWithRed(0.886, green:0.635, blue:0, alpha: 1)
end
Constant Summary collapse
- TeacupAppearanceApplyNotification =
'TeacupAppearanceApplyNotification'
Instance Attribute Summary
Attributes inherited from Stylesheet
Class Method Summary collapse
Instance Method Summary collapse
-
#apply_appearance(notification = nil) ⇒ Object
This block is only run once, and the properties object from when_contained_in is a copy (via Teacup::Style.new), so we remove the when_contained_in property using
delete. - #exclude_instance_vars ⇒ Object
-
#initialize(&block) ⇒ Appearance
constructor
disable the stylesheet ‘name’ parameter, and assign the “super secret” stylesheet name.
-
#style(*queries) ⇒ Object
Styles that have the
when_contained_insetting need to be kept separate. -
#when_contained_in ⇒ Object
Contains a list of styles associated with “containers”.
Methods inherited from Stylesheet
[], []=, #app_size, #autoresize, #constrain, #constrain_above, #constrain_below, #constrain_bottom, #constrain_center_x, #constrain_center_y, #constrain_height, #constrain_left, #constrain_right, #constrain_size, #constrain_to_left, #constrain_to_right, #constrain_top, #constrain_width, #constrain_xy, #device, #device_is?, #extends_style?, #flexible_bottom, #flexible_height, #flexible_left, #flexible_right, #flexible_top, #flexible_width, #flip, #get_stylesheet_cache, #iPad, #iPadRetina, #iPhone, #iPhone35, #iPhone4, #iPhone5, #iPhoneRetina, #identity, #import, #import_instance_vars, #imported_stylesheets, #inspect, #pi, #query, #rotate, #run_block, #screen_size, #set_stylesheet_cache, #spin, #stylesheet_cache, stylesheets, #transform_layer, #transform_view, #twist
Constructor Details
#initialize(&block) ⇒ Appearance
disable the stylesheet ‘name’ parameter, and assign the “super secret” stylesheet name
29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/teacup-ios/appearance.rb', line 29 def initialize(&block) NSNotificationCenter.defaultCenter.addObserver(self, selector: :'apply_appearance:', name: UIApplicationDidFinishLaunchingNotification, object: nil) NSNotificationCenter.defaultCenter.addObserver(self, selector: :'apply_appearance:', name: TeacupAppearanceApplyNotification, object: nil) super(&block) end |
Class Method Details
.apply ⇒ Object
17 18 19 |
# File 'lib/teacup-ios/appearance.rb', line 17 def self.apply NSNotificationCenter.defaultCenter.postNotificationName(TeacupAppearanceApplyNotification, object:nil) end |
Instance Method Details
#apply_appearance(notification = nil) ⇒ Object
This block is only run once, and the properties object from when_contained_in is a copy (via Teacup::Style.new), so we remove the when_contained_in property using delete
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/teacup-ios/appearance.rb', line 75 def apply_appearance(notification=nil) return unless run_block NSNotificationCenter.defaultCenter.removeObserver(self, name:UIApplicationDidFinishLaunchingNotification, object:nil) NSNotificationCenter.defaultCenter.removeObserver(self, name:TeacupAppearanceApplyNotification, object:nil) when_contained_in.each do |klass, properties| contained_in = properties.delete(:when_contained_in) contained_in = [contained_in] unless contained_in.is_a?(NSArray) # make a copy and add nil to the end contained_in += [nil] appearance = klass.send(:'appearanceWhenContainedIn:', *contained_in) Teacup.apply_hash appearance, properties.build, klass end styles.each do |klass, properties| appearance = klass.appearance Teacup.apply_hash appearance, properties.build, klass end end |
#exclude_instance_vars ⇒ Object
42 43 44 |
# File 'lib/teacup-ios/appearance.rb', line 42 def exclude_instance_vars @exclude_instance_vars ||= super + [:@when_contained_in] end |
#style(*queries) ⇒ Object
Styles that have the when_contained_in setting need to be kept separate
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/teacup-ios/appearance.rb', line 47 def style(*queries) # do not modify queries, it gets passed to `super` if queries[-1].is_a? Hash properties = queries[-1] else # empty style declarations are allowed, but accomplish nothing. return end if properties.include?(:when_contained_in) # okay NOW modify queries queries.pop queries.each do |stylename| style = Style.new style.stylename = stylename style.stylesheet = self style.merge!(properties) when_contained_in << [stylename, style] end else super end end |
#when_contained_in ⇒ Object
Contains a list of styles associated with “containers”. These do not get merged like the usual style declarations.
23 24 25 |
# File 'lib/teacup-ios/appearance.rb', line 23 def when_contained_in @when_contained_in ||= [] end |