2016-01-20 51 views
1

的占位符有什么办法,我可以有一个放大镜图标贴到我的占位符为UITextField像下面:的UITextField与含有图片和文字

Search Icon next to placeholder

我试图重写leftViewRectForBounds(bounds: CGRect):

override func leftViewRectForBounds(bounds: CGRect) -> CGRect { 
    var superRect = super.leftViewRectForBounds(bounds) 
    superRect.origin.x += 80 
    return superRect 
    } 

,但它没有工作

+0

尝试重写'placeholderRectForBounds: '。 – Justlike

+0

占位符位置完美,那么如何帮助我? – Quantaliinuxite

+0

覆盖UITextField并将图像视图添加为子视图。 – Justlike

回答

3

您可以使用NSAttributedStringNSTextAttachment将图像添加到文本。

我没有使用过他们一段时间,但我相信你可以做这样的事情......

let magnifyingGlassAttachment = NSTextAttachment(data: nil, ofType: nil) 
magnifyingGlassAttachment.image = UIImage(named: "MagnifyingGlass") 

let magnifyingGlassString = NSAttributedString(attachment: magnifyingGlassAttachment) 

现在你可以使用magnifyingGlassString属性串,并将其添加为归因文本的一部分UITextField

我相信你也可以精确指定放大镜如何呈现旁边的字符串(它是如何包装等)

事情是这样的......

var attributedText = NSMutableAttributedString(attributedString: magnifyingGlassString) 

let searchString = NSAttributedString(string: "Search for stuff") 

attributedText.appendAttributedString(searchString) 

textField.attributedPlaceholder = attributedText 
+0

这是一个美丽的解决方案,是否有任何方式的图像可以居中与文本的其余部分? – Quantaliinuxite

+0

@Quantaliinuxite嗨,是的,你可以这样做,通过继承'NSTextAttachment'就像这里所示... http://stackoverflow.com/questions/26105803/center-nstextattachment-image-next-to-single-line-uilabel – Fogmeister

+0

我确实看到了,并不认为它很优雅。好吧!谢谢 :) – Quantaliinuxite

1

您可以添加在TEX显示该图标图像视图或自定义视图通过正确放置它并设置适当的布局约束来实现。尽管你会将这个视图添加为兄弟,而不是子视图。

+0

所以我会计算占位符文本的大小,假设它位于中间,只需将图标放置在计算帧的左侧? – Quantaliinuxite

+0

所以这也适用,比其他答案多一点,但如果需要更多的定位控制,这是一个好方法。我应该补充说,如果将图像视图添加为子视图而不是同级视图,则更容易。 – Quantaliinuxite