나는 as UITextField
를 가지고 UIPickerView
있습니다 inputView
. 복사, 붙여 넣기, 잘라 내기 및 텍스트 선택으로 편집 할 수 있다는 점을 제외하면 모두 좋습니다. 선택 도구 만 텍스트 필드를 수정해야합니다.
setEnabled
또는 setUserInteractionEnabled
을 설정 하여 편집을 비활성화 할 수 있음을 배웠습니다 NO
. 좋습니다.하지만 TextField가 터치에 응답하지 않고 선택기가 표시되지 않습니다.
그것을 달성하기 위해 무엇을 할 수 있습니까?
답변
텍스트 필드 대리자를 사용하는 방법이 있습니다.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
여기서 NO를 반환하면 사용자가 텍스트를 편집하려는 모든 시도가 거부됩니다.
이렇게하면 필드를 활성화 된 상태로 둘 수 있지만 여전히 사람들이 텍스트를 붙여 넣는 것을 방지 할 수 있습니다.
답변
Nick 의 대답 을 신속하게 번역하십시오 .
P / S : false => 텍스트 필드를 입력 할 수 없으며 키보드로 편집 할 수 없습니다. code.EX로 텍스트를 설정할 수 있습니다. textField.text = “My String Here”
override func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return false
}
답변
이것은 가장 간단합니다.
in viewDidLoad 🙁 편집 불가능한 텍스트 필드에 대해서만 대리자를 설정합니다.
self.textfield.delegate=self;
다음 대리자 함수를 삽입하십시오.
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
return NO;
}
그게 다야!
답변
신속한 3+ :
class MyViewController: UIViewController, UITextFieldDelegate {
override func viewDidLoad() {
self.myTextField.delegate = self
}
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
if textField == myTextField {
// code which you want to execute when the user touch myTextField
}
return false
}
}
답변
의 사용자 지정 하위 클래스 만들기 위해 더 우아한 것 UITextField
그 반환 NO
모든 통화를 canPerformAction:withSender:
(여기서 또는 적어도 action
이다 @selector(cut)
나 @selector(paste)
)와 같이, 여기 .
또한 Bluetooth 키보드에서 텍스트 입력을 비활성화하기 위해 Nick의 제안에 따라 (BOOL) textField : (UITextField *) textField shouldChangeCharactersInRange : (NSRange) range replacementString : (NSString *) string을 구현합니다.
답변
레이블 텍스트없이 전체 UITextField 위에 UIButton을 정확히 배치하면 “보이지 않게”됩니다. 이 버튼은 Textfield 대신 터치를 수신하고 위임 할 수 있으며 TextField의 내용은 계속 표시됩니다.
답변
Swift에서 :
func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
questionField.resignFirstResponder();
// Additional code here
return false
}