установить buttonType UIButton программно [дубликат]

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

class SuperFormBuilder < ActionView::Helpers::FormBuilder
  include ApplicationHelper
  include FormHelper
  include ActionView::Helpers::TagHelper
  include ActionView::Helpers::FormTagHelper

  def length_field(label,*args)
    scale = 'medium'
    args.each do |v|
      if v.has_key?(:scale)
        scale = v[:scale]
        v.delete(:scale)
      end
    end
  value = length_conversion(@object.send(label.to_sym),scale)
  options = (args.length > 0) ? args.pop : {}
  return has_error(label, text_field_tag(field_name(label),value,*args) + ' ' +  length_unit(scale))
end

private
def field_name(label)
  return @object_name + "[#{label}]"
end

def has_error(label, output)
  return    "<div class='fieldWithErrors'>#{output}</div>" if @object.errors[label]
  return output
end

И он используется следующим образом:

<%= form_for( @section, {:action => 'save', :id => @section.id}, :builder => SuperFormBuilder) do |sf| %> 
   <%= sf.length_field :feed_size_min_w, :size => 3, :scale => 'small'  %>
<% end %>

Конечным результатом является значение в соответствующем модуле основывается на их выборе в системе (метрическая, имперская) и шкале IE small = дюймы или миллиметры.

Я в основном скопировал метод text_field из существующего построителя форм, который использует сам text_field_tag.

Есть две ошибки: 1) Зная имя поля объекта и как получить доступ к объекту, чтобы получить значение, которое вы хотите отформатировать. 2) Как правильно получить имя при отправке формы, оно является частью правильного хэша параметров.

Конструктору формы присваивается переменная класса @object. Вы можете получить значение поля, используя метод .send. В моем случае я отправляю ярлык: feed_size_min_w в @object и возвращаю его длину. Затем я преобразую его в желаемый формат и передаю его в text_field_tag.

Имя поля является ключом к тому, что оно заканчивается в хеше params, в моем случае params [: sections] one , Я сделал небольшую вспомогательную функцию с именем field_name, которая позаботится об этом.

Наконец has_error обертывает поле в div с ошибкой, если на этой метке есть ошибки.

23
задан GingerHead 5 May 2014 в 09:43
поделиться

1 ответ

Невозможно изменить .buttonType после его установки.

Вы можете подготовить две кнопки и скрыть одну из них в зависимости от цвета фона.

26
ответ дан 29 November 2019 в 00:47
поделиться