Latest 1.3.0
License MIT
Platforms ios 8.0, requires ARC

Build Status
Carthage compatible

A drop-in UITextView replacement which gives you: a placeholder.
Technically it differs from other solutions in that it tries to work like UITextField’s private _placeholderLabel so you should not suffer ugly glitches like jumping text views or loads of custom drawing code.


Your iOS project. Unit-tested on iOS 8.x, 9.x, 10.x — see .travis.yml for details.


Either clone this repo and add the project to your Xcode workspace, use CocoaPods or Carthage.


Add this to you Podfile:

pod 'SZTextView'


Add this line to your Cartfile:

github "glaszig/SZTextView"


SZTextView *textView = [SZTextView new];
textView.placeholder = @"Enter lorem ipsum here";
textView.placeholderTextColor = [UIColor lightGrayColor];
textView.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:18.0];

Analogously you can use the attributedPlaceholder property to set a fancy NSAttributedString as the placeholder:

NSMutableAttributedString *placeholder = [[NSMutableAttributedString alloc] initWithString:@"Enter lorem ipsum here"];
[placeholder addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,2)];
[placeholder addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(2,4)];
[placeholder addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(6,4)];

textView.attributedPlaceholder = placeholder;

Both properties placeholder and attributedPlaceholder are made to stay in sync.
If you set an attributedPlaceholder and afterwards set placeholder to something else, the set text gets copied to the attributedPlaceholder while trying to keep the original text attributes.
Also, placeholder will be set to attributedPlaceholder.string when using the attributedPlaceholder setter.

A simple demo and a few unit tests are included.


The placeholder is animatable. Just configure the double property fadeTime
to the seconds you’d like the animation to take.

User Defined Runtime Attributes

If you prefer using Interface Builder to configure your UI, you can use UDRA’s to set values for placeholder and placeholderTextColor.


  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request


Published under the MIT license.


I’ve developed this component for Cocktailicious. You should check it out *shamelessplug*.
Please let me now if and how you use this component. I’m curious.

Latest podspec

    "name": "SZTextView",
    "version": "1.3.0",
    "summary": "A drop-in UITextView replacement which gives you a placeholder.",
    "homepage": "",
    "license": "MIT",
    "authors": {
        "glaszig": "[email protected]"
    "source": {
        "git": "",
        "tag": "1.3.0"
    "platforms": {
        "ios": "8.0"
    "source_files": "Classes/SZTextView.{h,m}",
    "requires_arc": true

Pin It on Pinterest

Share This