여러 줄의 UITextfield를 만드는 방법은 무엇입니까?


259

사용자가 정보를 작성 해야하는 응용 프로그램을 개발 중입니다. 이를 위해 UITextField다중 라인 인 것이 필요합니다 (일반적 UITextField으로 단일 라인입니다).

인터넷 검색 UITextViewUITextfield할 때이 목적 대신에 사용하는 답변을 찾으십시오 .


여기에 내가 그 목적을 위해 쓴 작은 컨트롤이 있습니다. 여러 줄을 지원하며 키보드를 닫기위한 완료 버튼도 있습니다. 게다가 무료 느낄 code.google.com/p/galtextfield
갈 빈

2
클래스 Xcode 프로젝트를 가져 와서 사용이 타사를 사용, 그것의 너무 좋은 링크를 작업 : github.com/adonoho/HPGrowingTextView이
chowdary 마헤

답변:


435

UITextField 특히 한 줄만입니다.

Google 검색이 정확하므로 여러 줄로 된 텍스트를 표시하고 편집 하는 UITextView대신 사용해야 UITextField합니다.

Interface Builder에서 UITextView원하는 위치를 추가 하고 "편집 가능"상자를 선택하십시오. 기본적으로 여러 줄로 표시됩니다.


7
그렇다면 이벤트 추가 화면에서 기본 캘린더 앱이 자리 표시 자와 단어 줄 바꿈으로 View를 만드는 방법을 알려주십시오.
Gennadiy Ryabkin

3
UITextView에 대한 자리 표시자를 설정하는 방법?
Mani

4
TextView에 자리 표시자를 추가 할 수는 없지만 TextView에 회색 레이블을 추가하고 사용자가 텍스트를 입력하면 숨길 수 있습니다.
앤드류 로마노프

다음 질문에 도움을 줄 수 있습니까? 사용자가 UITextView에 글 머리 기호 텍스트 (여러 줄 바꿈)를 쓰면 총 줄 바꿈 수를 감지하는 방법은 무엇입니까?
Markus

@Markus 당신은 그것에 대한 새로운 질문을 열어야합니다
Nathan F.

20

UITextView를 사용하여 UITextField를 위조 할 수 있습니다. 문제는 자리 표시 자 기능이 손실된다는 것입니다.

UITextView를 사용하도록 선택하고 자리 표시자가 필요한 경우 다음을 수행하십시오.

viewDidLoad에서 색상과 텍스트를 자리 표시 자로 설정하십시오.

myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."

그런 다음 UITextView를 선택하면 자리 표시자가 사라집니다.

func textViewDidBeginEditing (textView: UITextView) {
    if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() {
        myTxtView.text = nil
        myTxtView.textColor = .white
    }
}

사용자가 편집을 마치면 값이 있는지 확인하십시오. 없으면 자리 표시자를 다시 추가하십시오.

func textViewDidEndEditing (textView: UITextView) {
    if myTxtView.text.isEmpty || myTxtView.text == "" {
        myTxtView.textColor = .lightGray
        myTxtView.text = "Type your thoughts here..."
    }
}

가짜해야 할 다른 기능 :

UITextField는 종종 모든 문자를 대문자로 표시하므로 해당 기능을 UITableView에 추가 할 수 있습니다.

myTxtView.autocapitalizationType = .words

UITextField는 일반적으로 스크롤되지 않습니다.

myTxtView.scrollEnabled = false

18

좋아, 나는 약간의 트릭으로 그것을했다;) 먼저 빌드하고 다음 UITextField과 같이 증가시켰다 size.

CGRect frameRect = textField.frame;
        frameRect.size.height = 53;
        textField.frame = frameRect;

그런 다음 UITextViewu가 만든 것과 동일한 영역에 정확히 빌드 UITextField하고 삭제하십시오 background color. 이제는 여러 줄이있는 것처럼 보입니다 TextField!


2
자동 레이아웃을 사용하고 UITextField의 모든면을 UITextView에 고정했습니다. 정말 대단하다, 고마워!
phatmann

@phantmann하시기 바랍니다. 자동 레이아웃 코드를 알려주시겠습니까?
Esteve

8
이 생성 UITextView됩니다. UITextField를 갖는 요점은 a와 다르게 동작한다는 것 UITextView입니다.
Nate Symer

2
차이의 무리가 있습니다 UITextView그리고 UITextfield: 그들은에서 상속 UIScrollViewVS UIControl-편집 할 수 없습니다별로 기본적으로 기본 편집-대, 여러 대 한 줄, 다른 위임 프로토콜, 노 자리 대 자리.
Sam Ballantyne의

UITextView텍스트 단락입니다. 텍스트 단락이 필요한 경우에는 사용하고 그렇지 않으면 사용하십시오.
Sam Ballantyne의

9

여러 줄의 동작 외에도 UITextView와 UITextField의 주요 차이점은 UITextView가 자리 표시자를 제안하지 않는다는 것입니다. 이 제한을 무시하기 위해 "가짜 자리 표시 자"와 함께 UITextView를 사용할 수 있습니다.

자세한 내용은이 SO 질문을 참조하십시오 : UITextView의 자리 표시 자 .


2

두 줄의 텍스트가있는 UITextField가 있어야하는 경우 한 가지 옵션은 두 번째 줄의 텍스트에 대한 UITextField의 하위보기로 UILabel을 추가하는 것입니다. 내 앱에 사용자가 자주 인식하지 못하는 UITextField를 탭하여 편집 할 수 있으며 "Tap to Edit"라는 작은 자막 텍스트를 UITextField에 추가하고 싶었습니다.

CGFloat tapLlblHeight = 10;
UILabel *tapEditLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, textField.frame.size.height - tapLlblHeight - 2, 70, tapLlblHeight)];
tapEditLbl.backgroundColor = [UIColor clearColor];
tapEditLbl.textColor = [UIColor whiteColor];
tapEditLbl.text = @"Tap to Edit";

[textField addSubview:tapEditLbl];

2

예, UITextView가 찾고 있습니다. 리턴 키와 같이 다르게 처리해야하지만 텍스트를 추가 할 수 있으며 텍스트가 너무 많으면 위아래로 스크롤 할 수 있습니다.

이 링크에는 화면을 만들어 데이터를 입력하는 방법에 대한 정보가 있습니다.

데이터 입력 화면을 만듭니다



0

위의 h4xxr의 답변을 보완하는 UITextField의 높이를 조정하는 더 쉬운 방법은 속성 관리자-> 텍스트 필드에서 사각형 테두리 스타일을 선택하는 것입니다. 기본적으로 UITextfield의 테두리 스타일은 타원입니다.

참조 : 여기에 Brian 대답 : UITextField 높이를 설정하는 방법은 무엇입니까?


-1

나를 위해 일한 다른 옵션이 있습니다.

서브 클래스 UITextField 및 덮어 쓰기 :

- (void)drawTextInRect:(CGRect)rect

이 방법에서는 다음과 같은 작업을 수행 할 수 있습니다.

    NSDictionary *attributes = @{ NSFontAttributeName : self.font,
                                  NSForegroundColorAttributeName : self.textColor };

    [self.text drawInRect:verticalAlignedRect withAttributes:attributes];

이 코드는 rect에 충분한 공간이 있으면 필요한만큼 많은 행을 사용하여 텍스트를 렌더링합니다. 필요에 따라 다른 속성을 지정할 수 있습니다.

사용하지 마세요:

self.defaultTextAttributes

한 줄 텍스트 렌더링을 강제합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.