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_in` setting need to be kept separate.
-
#when_contained_in ⇒ Object
Contains a list of styles associated with “containers”.
Methods inherited from Stylesheet
[], []=, #extends_style?, #get_stylesheet_cache, #import, #import_instance_vars, #imported_stylesheets, #inspect, #method_missing, #query, #run_block, #set_stylesheet_cache, #stylesheet_cache, stylesheets
Methods included from StylesheetExtension
#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?, #flexible_bottom, #flexible_height, #flexible_left, #flexible_right, #flexible_top, #flexible_width, #flip, #iPad, #iPadRetina, #iPhone, #iPhone35, #iPhone4, #iPhone5, #iPhoneRetina, #identity, #pi, #rotate, #screen_size, #spin, #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 |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Teacup::Stylesheet
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 |