2016-05-26 4 views
0

Я пытаюсь отображать целочисленные значения вместо float. Я попытался следующие:Отображение целочисленных значений в SliderRow

section.append(SliderRow() { 
     $0.title = "Number of items" 
     $0.tag = "numberOfItems" 
     $0.minimumValue = 1 
     $0.maximumValue = 10 
     $0.steps = 10 
     $0.value = 5 
     $0.onChange { row in 
      let isInteger = floor(row.value!) == row.value! 
      if (!isInteger) { 
       row.value = floor(row.value!) 
      } 

      let formattedString = String(format: "%.0f", row.value!) 
      row.cell.valueLabel.text = formattedString 
     } 
    }) 

formattedString отображает значения, которые я хочу, но я не в состоянии отобразить их на экране. Я могу получить доступ ко всем другим атрибутам row.cell. Я изменяю цвет текста, например, но не текст. Я предполагаю, что я устанавливаю текст, но он скоро перезаписывается.

Есть ли способ сделать слайдер для отображения целочисленных значений?

Спасибо.

+0

Можете ли вы добавить еще какой-нибудь код, в котором вы меняете текст UILabel или что-то зависит? –

+0

@ SohilR.Memon: Я обновил его с полным кодом, который я использую для строки. Надеюсь, это то, что вы имели в виду. Я думаю, что это все соответствующий код, который у меня есть, но, пожалуйста, дайте мне знать, если я буду изучать что-то еще. –

+0

Можете ли вы поставить статическую 'String' для проверки ее отображения или нет? –

ответ

0

Для решения проблемы я клонировал репозиторий Eureka. Оказывается, я был прав насчет переписывания значений. Чтобы проверить это, я установить текст на постоянное значение внутри обработчика OnChange, а затем добавил операторы печати в исходном коде SliderRow в функции ValueChanged:

if shouldShowTitle() { 

     print("current value: \(valueLabel.text)") 

     valueLabel.text = "\(row.value!)" 

     print("updated value: \(valueLabel.text)") 
    } 

Выходной сигнал выглядел так:

текущее значение: Дополнительно ("XYZ")

обновленное значение: Необязательный ("3.0")

текущее значение: Необязательный ("XYZ")

обновленного значения: Необязательный ("5,0")

Так что я создал себе класс SliderRowInt, который использует целые числа:

public final class SliderRowInt: Row<Int, SliderCellInt>, RowType { 

    public var minimumValue: Int = 0 
    public var maximumValue: Int = 10 
    public var steps: UInt = 20 

    required public init(tag: String?) { 
     super.init(tag: tag) 
    } } 

Теперь я использую целую версию. Возможно, это не самое элегантное решение, но для меня это работало отлично.

Существует аналогичная проблема с StepperRow, которую я решил так же.

Я проверил в обоих классах в моем клонированного хранилище в случае, если кто сталкивается с той же проблемой, они могут быть найдены здесь: https://github.com/volkanx/Eureka/

3

с декабря 2, 2016 г., есть гораздо более простой подход .....

$0.displayValueFor = { 
    return "\(Int($0 ?? 0))" 
} 

(кредит https://github.com/xmartlabs/Eureka/issues/817, показывающий, как это сделать - и связанное с ним исправление)

Это прекрасно работает, показывающей Int в Eureka SliderRow, а также StepperRow See this picture of xcode Simulator showing Int values on StepperRow and SliderRow

Смежные вопросы