답변:
선택할 암시 적 스타일은 없으며 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 이라는 내 라이브러리를 확인하고 싶을 수도 있습니다 .
다음에서 직접 둥근 모서리 텍스트보기 (및 텍스트 필드 / 단추 / 평야 UIView
)를 만들 수 Interface Builder
있습니다.
또한 유효성 검사가 포함 된 텍스트 필드, 테두리가있는 컨트롤, 점선 테두리, 원 및 헤어 라인보기와 같은 다른 유용한 기능이 많이 있습니다.
나는 이미 이것에 대한 많은 답변이 있다는 것을 알고 있지만 (적어도 Swift에서는) 충분한 것을 찾지 못했습니다. UITextField와 동일한 정확한 경계를 제공하는 솔루션을 원했습니다 (지금 보이는 것처럼 보이는 근사한 것이 아니라 정확하게 모양을 유지하고 항상 정확하게 보이는 것). 배경에 대한 UITextView를 백업하기 위해 UITextField를 사용해야했지만 매번 별도로 만들 필요는 없었습니다.
아래 솔루션은 테두리에 고유 한 UITextField를 제공하는 UITextView입니다. 이것은 내 전체 솔루션의 트림 된 버전이며 (유사한 방식으로 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가 필요합니다.
아이폰 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이 둘 다 만족했습니다. 그렇기 때문에 나는이 제 3자가 다른 사람들에게 도움이 될 것이라고 생각합니다. 또한 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
있습니까?