Sha256: 654f49f50cccedb775f5f817680fede0dafb487eeac816e20f462a59fceac632

Contents?: true

Size: 1.59 KB

Versions: 3

Compression:

Stored size: 1.59 KB

Contents

# Methods to retrieve a subview using the stylename as a key
# Kinda similar to jQuery-style $(el).find('stylename')
class UIView

  # get one subview by stylename or class.  If the receiver matches, it will be
  # returned
  # my_view.viewWithStylename :button => #<UIButton..>
  # my_view.viewWithStylename UIButton => #<UIButton..>
  def viewWithStylename name_or_class
    return self if self._teacup_check_stylename(name_or_class)

    view = subviews.find { |view| view._teacup_check_stylename(name_or_class) }
    return view if view

    # found_subview will get assigned to the view we want, but the subview is
    # what is returned.
    found_subview = nil
    view = subviews.find { |subview| found_subview = subview.viewWithStylename(name_or_class) }
    return found_subview if view

    nil  # couldn't find it
  end

  # get all subviews by stylename or class
  # my_view.viewsWithStylename :button => [#<UIButton..>, #<UIButton...>]
  # my_view.viewsWithStylename UIButton => [#<UIButton..>, #<UIButton...>]
  def viewsWithStylename name_or_class
    r = []
    r << self if self._teacup_check_stylename(name_or_class)

    subviews.each do |view|
      r << view if view._teacup_check_stylename(name_or_class)
      r.concat view.viewsWithStylename name_or_class
    end
    r
  end

  def _teacup_check_stylename(name_or_class)
    if name_or_class.is_a? Class
      return self.is_a?(name_or_class)
    elsif stylename == name_or_class
      return true
    elsif stylesheet.is_a?(Teacup::Stylesheet)
      return stylesheet.extends_style?(self.stylename, name_or_class)
    end
    return false
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
teacup-1.3.2 lib/teacup/z_core_extensions/ui_view_getters.rb
teacup-1.3.1 lib/teacup/z_core_extensions/ui_view_getters.rb
teacup-1.3.0 lib/teacup/z_core_extensions/ui_view_getters.rb