отключить отдельные строки в пользовательском средстве выбора - PullRequest
0 голосов
/ 13 декабря 2011

я разрабатываю приложение, которое показывает сборщик со следующими значениями: 1.Morning 2.Noon 3.Evening

На основе текущего времени мне нужно показать соответствующие значения.

говорят, что если в 3 часа дня, пользователь сможет выбрать только Вечер.

Теперь мои вопросы: могу ли я сделать так, чтобы «утро и полдень» не были выбраны. похож на Выбор даты, могу ли я серые варианты ?? пользователь должен знать все параметры, но он должен иметь возможность выбирать параметры в зависимости от времени.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

Если вы хотите выделить некоторые значения в представлении средства выбора, используйте следующий API делегата, чтобы переопределить представление для этой позиции.

 - (UIView *)viewForRow:(NSInteger)row forComponent:(NSInteger)component

Создайте UILabel и сделайте его цвет текста серыми верните его как вид для вышеупомянутого.

А если выделен серый текст, выполните анимацию для выбора по умолчанию, вызвав приведенный ниже API.

 - (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated;

Надеюсь, это поможет.

0 голосов
/ 19 ноября 2018

Чтобы выделить строки в средстве выбора, существует гораздо более простое решение, чем создание собственного представления. То есть использовать приписанный атрибут заголовка.

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString?

Поскольку эта функция вернется к titleForRow, если вы вернете nil, вы можете вернуть серый для отключенных строк и использовать стандартный titleForRow для возврата остальных. Как пример:

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
    // Need to provide the below function isRowDisabled that returns true as needed
    if isRowDisabled(row:row) {
        let attributes = [NSAttributedStringKey.foregroundColor: UIColor.gray]
        let str = NSAttributedString(string: "my gray text on row \(row)", attributes:attributes)
        return str
    } else {
        return nil
    }
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return "my normal text on row \(row)"
}

Затем вам придется игнорировать didSelectRow для отключенных строк, как упоминалось в других ответах.

...