14

テキストフィールドのプレースホルダーをイタリック体にしようとしていますが、私のアプリは 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ますか?

4

4 に答える 4

18

ウォーレンが指摘したように、現在、スタイリングはあなたが試みている方法で達成することはできません。良い回避策は、プレースホルダーの見た目どおりにテキストフィールドのフォント属性を設定し、ユーザーが入力を開始するたびにテキストフィールドのフォントを変更することです。プレースホルダーとテキストは異なるフォントのように見えます。

これを行うには、テキストフィールドのデリゲートを作成し、次のように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;
}
于 2013-02-23T00:29:36.563 に答える
10

これはほぼ間違いなくバグです。プロパティドキュメントではattributedPlaceholder、文字列は前景色の属性に関係なく灰色を使用して描画されると主張していますが、そうではありません。前景色と背景色の両方を設定できます。残念ながら、フォント属性が取り除かれ、システム フォントに戻されたように見えます。

回避策として、プレースホルダーを自分でオーバーライドdrawPlaceholderInRect:して描画することをお勧めします。さらに、これについて Radar を提出し、バグを示す最小限のサンプル プロジェクトを含める必要があります。

于 2013-02-22T20:01:05.900 に答える
-1

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
}
于 2015-09-23T17:03:12.413 に答える