Nano Hash - криптовалюты, майнинг, программирование

UITextField attributedPlaceholder не действует

Я пытаюсь выделить заполнители в текстовых полях курсивом, и, поскольку мое приложение ориентировано на iOS 6.0 или новее, я решил использовать свойство attributedPlaceholder вместо того, чтобы накатывать что-то более индивидуальное. Код выглядит следующим образом:

NSString *plString = @"optional";
NSAttributedString *placeholder = [[NSAttributedString alloc] initWithString:plString
        attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-LightItalic" size:15]}];
for (UITextField *t in myTextfields){
    t.placeholder = plString;
    t.attributedPlaceholder = placeholder;
}

Тем не менее, стиль заполнителя по-прежнему не курсивный, а такой же, как у обычного текста, только более тусклый. Что мне не хватает для работы NSAttributedString?


  • Я могу воспроизвести вашу проблему и думаю, что это ошибка в iOS. 22.02.2013

Ответы:


1

Как отмечает Уоррен, в настоящее время стиль не может быть выполнен так, как вы пытаетесь. Хорошим обходным решением было бы настроить атрибуты шрифта текстового поля так, как вы хотели бы, чтобы ваш заполнитель выглядел, а затем изменить шрифт текстового поля всякий раз, когда пользователь начинает печатать. Это будет выглядеть так, как будто заполнитель и текст - это разные шрифты.

Вы можете сделать это, создав делегата текстового поля и используя shouldChangeCharactersinRange следующим образом:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{    
    // If there is text in the text field
    if (textField.text.length + (string.length - range.length) > 0) {
        // Set textfield font
        textField.font = [UIFont fontWithName:@"Font" size:14];
    } else {
        // Set textfield placeholder font (or so it appears)
        textField.font = [UIFont fontWithName:@"PlaceholderFont" size:14];
    }

    return YES;
}
23.02.2013

2

Это почти наверняка ошибка. документация по свойству attributedPlaceholder утверждает, что строка будет нарисована серым цветом независимо от атрибута цвета переднего плана, но это не так: вы можете установить как цвет переднего плана, так и цвет фона. К сожалению, атрибут font, кажется, был удален и вернулся к системному шрифту.

В качестве обходного пути я рекомендую переопределить drawPlaceholderInRect: и самостоятельно нарисовать заполнитель. Кроме того, вы должны сообщить об этом и включить минимальный образец проекта, демонстрирующий ошибку.

22.02.2013
  • Похоже, что drawPlaceholderInRect: не будет вызываться в UITextField. См. stackoverflow.com/questions/1920783/ 24.02.2013
  • Пожалуйста, проигнорируйте мой комментарий, этот вопрос ТАК старый, и теперь он, кажется, работает. 24.02.2013

  • 3

    Я только что сам наткнулся на эту проблему. Очевидно, заполнитель возьмет тот шрифт, который назначен текстовому полю. Просто установите шрифт текстового поля, и все будет хорошо.

    Для всего остального, например для цвета заполнителя, я бы все равно вернулся к attributedPlaceholder

    19.06.2013
  • Отличный ответ. Сработало у меня! 22.06.2013

  • 4

    iOS8 / 9 / Swift 2.0 - рабочий пример

    func colorPlaceholderText(){
        var multipleAttributes = [String : NSObject]()
        multipleAttributes[NSForegroundColorAttributeName] = UIColor.appColorCYAN()
        //OK - comment in if you want background color
        //multipleAttributes[NSBackgroundColorAttributeName] = UIColor.yellowColor()
        //OK - Adds underline
        //multipleAttributes[NSUnderlineStyleAttributeName] = NSUnderlineStyle.StyleDouble.rawValue
    
    
        let titleString = "Search port/country/vessel..."
        let titleAttributedString = NSAttributedString(string: titleString,
            attributes: multipleAttributes)
    
    
        self.textFieldAddSearch.attributedPlaceholder = titleAttributedString
    }
    
    23.09.2015
  • Это работает для цвета. Но не для самого шрифта 08.07.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..