Answers:
没有必须选择的隐式样式,它涉及使用QuartzCore
框架编写一些代码:
//first, you
#import <QuartzCore/QuartzCore.h>
//.....
//Here I add a UITextView in code, it will work if it's added in IB too
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(50, 220, 200, 100)];
//To make the border look very close to a UITextField
[textView.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor]];
[textView.layer setBorderWidth:2.0];
//The rounded corner part, where you specify your view's corner radius:
textView.layer.cornerRadius = 5;
textView.clipsToBounds = YES;
它仅适用于OS 3.0及更高版本,但我想现在它仍然是事实上的平台。
UITextField
将borderStyle
属性设置为来使用UITextBorderStyleRoundedRect
-参见下面的我的文章。
该代码对我来说效果很好:
[yourTextView.layer setBackgroundColor: [[UIColor whiteColor] CGColor]];
[yourTextView.layer setBorderColor: [[UIColor grayColor] CGColor]];
[yourTextView.layer setBorderWidth: 1.0];
[yourTextView.layer setCornerRadius:8.0f];
[yourTextView.layer setMasksToBounds:YES];
在界面生成器中设置文本视图之后。
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
textView.layer.cornerRadius = 5
textView.layer.borderColor = UIColor.gray.withAlphaComponent(0.5).cgColor
textView.layer.borderWidth = 0.5
textView.clipsToBounds = true
}
@IBOutlet weak var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
textView.layer.cornerRadius = 5
textView.layer.borderColor = UIColor.grayColor().colorWithAlphaComponent(0.5).CGColor
textView.layer.borderWidth = 0.5
textView.clipsToBounds = true
}
编辑:您必须导入
#import <QuartzCore/QuartzCore.h>
用于使用拐角半径。
试试这个肯定会起作用
UITextView* txtView = [[UITextView alloc] initWithFrame:CGRectMake(50, 50, 300, 100)];
txtView.layer.cornerRadius = 5.0;
txtView.clipsToBounds = YES;
正如Rob认为的那样,如果希望边框颜色与之相似,UITextField
则需要添加以下行,将边框宽度更改为2.0,将边框颜色更改为灰色
[textView.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor]];
[textView.layer setBorderWidth:2.0];
我想要真正的交易,因此将添加UIImageView
为的子视图UITextView
。这会匹配上的本机边界UITextField
,包括从上到下的渐变:
textView.backgroundColor = [UIColor clearColor];
UIImageView *borderView = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, textView.frame.size.width, textView.frame.size.height)];
borderView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
UIImage *textFieldImage = [[UIImage imageNamed:@"TextField.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 8, 15, 8)];
borderView.image = textFieldImage;
[textField addSubview: borderView];
[textField sendSubviewToBack: borderView];
这些是我使用的图像:
一种解决方案是在UITextView下方添加一个UITextField,使UITextView
背景透明,并禁用该控件上的任何用户交互。UITextField
。然后在代码UITextField
中用类似的方法更改框架
self.textField.frame = CGRectInset(self.textView.frame, 0, -2);
您将拥有与文本字段完全相同的外观。
并按照Jon的建议,您应该将这段代码[UIViewController viewDidLayoutSubviews]
放在iOS 5.0+上。
viewDidLayoutSubviews:
(iOS 5.0+)。
您可能想查看我的名为DCKit的库。
您可以直接从以下位置制作圆角文本视图(以及text field / button / plain UIView
)Interface Builder
:
它还具有许多其他有用的功能,例如带有验证的文本字段,带有边框,虚线边框,圆形和细线视图的控件等。
我知道对此已经有很多答案,但是我真的没有找到足够的答案(至少在Swift中)。我想要一个提供与UITextField完全相同的边框的解决方案(不是一个看起来像现在的近似边框,而是一个看起来像它并且将永远看起来像它的近似边框)。我需要使用UITextField来支持背景的UITextView,但不想每次都分别创建它。
下面的解决方案是一个UITextView,它为边框提供了自己的UITextField。这是我完整解决方案的精简版(以类似的方式向UITextView添加了“占位符”支持),并发布在此处:https : //stackoverflow.com/a/36561236/1227119
// This class implements a UITextView that has a UITextField behind it, where the
// UITextField provides the border.
//
class TextView : UITextView, UITextViewDelegate
{
var textField = TextField();
required init?(coder: NSCoder)
{
fatalError("This class doesn't support NSCoding.")
}
override init(frame: CGRect, textContainer: NSTextContainer?)
{
super.init(frame: frame, textContainer: textContainer);
self.delegate = self;
// Create a background TextField with clear (invisible) text and disabled
self.textField.borderStyle = UITextBorderStyle.RoundedRect;
self.textField.textColor = UIColor.clearColor();
self.textField.userInteractionEnabled = false;
self.addSubview(textField);
self.sendSubviewToBack(textField);
}
convenience init()
{
self.init(frame: CGRectZero, textContainer: nil)
}
override func layoutSubviews()
{
super.layoutSubviews()
// Do not scroll the background textView
self.textField.frame = CGRectMake(0, self.contentOffset.y, self.frame.width, self.frame.height);
}
// UITextViewDelegate - Note: If you replace delegate, your delegate must call this
func scrollViewDidScroll(scrollView: UIScrollView)
{
// Do not scroll the background textView
self.textField.frame = CGRectMake(0, self.contentOffset.y, self.frame.width, self.frame.height);
}
}
有一个很棒的背景图片,与UITextView
iPhone的“消息”应用程序中发送短信所使用的背景图片相同。您将需要Adobe Illustrator来获取和修改它。
iPhone ui矢量元素
#import <QuartzCore/QuartzCore.h>
- (void)viewDidLoad{
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(50, 220, 200, 100)];
textView.layer.cornerRadius = 5;
textView.clipsToBounds = YES;
[textView.layer setBackgroundColor: [[UIColor whiteColor] CGColor]];
[textView.layer setBorderColor: [[UIColor grayColor] CGColor]];
[textView.layer setBorderWidth: 1.0];
[textView.layer setCornerRadius:8.0f];
[textView.layer setMasksToBounds:YES];
[self.view addSubView:textview];
}
您可以在文本视图顶部创建一个不接受任何事件的文本字段,如下所示:
CGRect frameRect = descriptionTextField.frame;
frameRect.size.height = 50;
descriptionTextField.frame = frameRect;
descriptionTextView.frame = frameRect;
descriptionTextField.backgroundColor = [UIColor clearColor];
descriptionTextField.enabled = NO;
descriptionTextView.layer.cornerRadius = 5;
descriptionTextView.clipsToBounds = YES;
如果要保持控制器代码整洁,则可以如下子类化UITextView,并在Interface Builder中更改类名。
RoundTextView.h
#import <UIKit/UIKit.h>
@interface RoundTextView : UITextView
@end
RoundTextView.m
#import "RoundTextView.h"
#import <QuartzCore/QuartzCore.h>
@implementation RoundTextView
-(id) initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
[self.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.333] CGColor]];
[self.layer setBorderWidth:1.0];
self.layer.cornerRadius = 5;
self.clipsToBounds = YES;
}
return self;
}
@end
这是我的解决方案:
- (void)viewDidLoad {
[super viewDidLoad];
self.textView.text = self.messagePlaceholderText;
self.textView.layer.backgroundColor = [[UIColor whiteColor] CGColor];
self.textView.layer.borderColor = [[[UIColor grayColor] colorWithAlphaComponent:0.3] CGColor];
self.textView.layer.borderWidth = 0.5;
self.textView.layer.cornerRadius = 5.5f;
self.textView.layer.masksToBounds = YES;
self.textView.textColor = [[UIColor grayColor] colorWithAlphaComponent:0.4];
}
- (void)textViewDidBeginEditing:(UITextView *)textView {
if (textView == self.tvMessage) {
// Delete placeholder text
if ([self.textView.text isEqualToString:self.messagePlaceholderText]) {
self.textView.text = @"";
self.textView.textColor = [UIColor blackColor];
}
}
}
- (void)textViewDidEndEditing:(UITextView *)textView {
if (textView == self.tvMessage) {
// Write placeholder text
if (self.textView.text.length == 0) {
self.textView.text = self.messagePlaceholderText;
self.textView.textColor = [[UIColor grayColor] colorWithAlphaComponent:0.4];
}
}
}
这是一个古老的问题,我也一直在寻找这个问题的答案。luvieeres的回答是100%正确,后来Rob添加了一些代码。很好,但是我在另一个问题答案中找到了第三方,这似乎对我很有帮助。我不仅是搜索的类似的外观UITextField
上UITextView
,我也搜索了多行支持。ChatInputSample都满意。因此,我认为该第三方可能会对其他人有所帮助。还要感谢帖木儿(Timur),他在这里提到了这个开源。
在iOS7中,以下内容与UITextField边框完全匹配(至少在我看来):
textField.layer.borderColor = [[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor];
textField.layer.borderWidth = 0.5;
textField.layer.cornerRadius = 5;
textField.clipsToBounds = YES;
无需导入任何特殊内容。
感谢@uvieere和@hanumanDev,他们的回答几乎使我到了:)
怎么样:
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 280, 32)];
textField.borderStyle = UITextBorderStyleRoundedRect;
[self addSubview:textField];
UITextField
带有userInteractionEnabled
设置为NO
。
UITextField
而只是关闭电源userInteractionEnabled
吗?