2013-04-08 6 views
19

안녕하세요. 저는 iPhone 앱으로 작업하고 있습니다. UITextfield에 자리 표시 자 속성이 있습니다. 그러나 UITextview 자리 표시 자 속성이 없습니다. UITextview에 대한 자리 표시자를 사용자 정의하는 방법을 알고 있습니다. 하지만 차이점을 알려주세요.왜 UITextview에는 UITextField와 같은 자리 표시 자 속성이 없습니다.

및 UITextfield는 UIView ... NSObject에서 상속받은 UIControl에서 상속합니다. 및 UITextview는 UIScrollView, UIView, UIresponder ... NSOBject에서 상속받습니다. 그러나 장소 홀더 자산과의 차이점은 어디입니까?

textfield에 자리 표시 자 속성이있는 이유, textview에 자리 표시자가없는 이유는 무엇입니까?

아이디어 나 제안 사항을 더 잘 설명해주십시오.

+0

이 [포스트] (http://stackoverflow.com/a/12772447/1011213) – codeqi

답변

26

아래로 위임 콜백에서 숨 깁니다. 애플이 어떻게 그들의 사용을 인식하고 그들의 사용을 선호하는지에 관한 것이다.

UITextField은 하나의 항목입니다. 사용자 이름, 비밀번호, 주소 비트 또는 거의 모든 것을 입력하는 데 사용할 수 있습니다. 종종 그 중 몇 개가 함께 묶여있어 자리 표시 자 텍스트없이 어느 필드에 어떤 데이터가 있어야하는지 파악하기 어려울 수 있습니다. 장소 소유자는 필드의 목적을 알려줍니다.

UITextView

Text field example

텍스트의 블록이다. 일반적으로 헤더와 연관된 여러 줄. 따라서 자리 표시 자 텍스트는 종종 유용하지 않습니다. 텍스트보기는 정적 텍스트로 채워질 가능성이 높기 때문에 자리 표시 자 텍스트가별로 유용하지 않습니다.

어쨌든 UITextView에 대한 자리 표시 자 속성을 추가해야한다고 생각합니까? 예. 필요할 때 자신 만의 것을 만들어야하는 것은 짜증나기도합니다. Apple은 또한 UITextView을 사용하는 일부 위치에 자리 표시 자 텍스트를 사용합니다. 다음 예는 일정 관리 항목을 추가 한 것입니다.

Text view example with placeholder

+0

대단히 감사합니다. 우수 답변 ... –

+0

마지막 줄에서 UITextView를 의미 할 수도 있습니다. Apple은 UITextView를 사용하는 일부 위치에서 자리 표시 자 텍스트도 사용합니다. – jomafer

51

Apple이 UITextView에 placeHolder 특성을 포함하지 않은 이유를 모르겠습니다. 하지만 자리 표시 자 텍스트가 포함 된 UILabel 하위보기를 사용하여 추가 할 수있었습니다.

그런 다음 표시하거나 UITextField이 자리 값을 가지고 있으며, UITextView하지 않는 그들의 기업, 또는 프로그래밍과 아무 상관이 왜

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    self.defaultLabel.hidden = YES; 
} 

- (void)textViewDidChange:(UITextView *)txtView 
{ 
    self.defaultLabel.hidden = ([txtView.text length] > 0); 
} 

- (void)textViewDidEndEditing:(UITextView *)txtView 
{ 
    self.defaultLabel.hidden = ([txtView.text length] > 0); 
} 
+0

좋은 대답을보십시오! 주의 :''viewWillAppear'에'[txtView becomeFirstResponder]'가 있으면'textViewDidBeginEditing'을 제거하거나''self.defaultLabel.hidden = NO;'를 설정하십시오. 감사! – tcd

+0

매력처럼 작동합니다. 감사합니다 –

+0

완벽! 그리고 컨트롤러를 보여줄 때 텍스트 뷰를 미리로드하고 이전에 사용자가 저장 한 값을 사용한다면 preload 코드 다음에'self.defaultLabel.hidden = ([txtView.text length]> 0); '을 추가하는 것을 잊지 마십시오 viewWillAppear에서 그렇지 않으면 자리 표시자는로드 된 텍스트 상단에 표시됩니다. – Hunkpapa