iOS 의견 피드백 형식의 입력 표시 줄 구현
본 고 는 주로 iOS 를 이용 하여 의견 피드백 유형 을 어떻게 실현 하 는 지 에 대한 입력 란 을 소개 하고 참고 학습 을 제공 합 니 다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 해 보 겠 습 니 다.
의견 피드백 을 하려 면 TextField 는 한 줄 밖 에 없습니다.TextView 는 힌트 가 없습니다.좋 습 니 다.하나만 할 수 있 습 니 다.바로 TextView 를 입력 상자 로 하고 label 을 추가 하 는 것 입 니 다.여기 서 관건 은 입력 내용 의 제한 입 니 다.저 는 120 자 를 제 한 했 지만 여러 가지 고려 를 해 야 합 니 다.코드 를 보 세 요.
예제 코드
@property (nonatomic, strong) UILabel *placholderLabel; //
@property (weak, nonatomic) IBOutlet UITextView *infoTF;
#define MAX_LIMIT_NUMS 120 //
- (void)controlView {
self.infoTF.layer.borderWidth = 0.5;//
self.infoTF.layer.cornerRadius = 5.0;//
self.infoTF.layer.borderColor =[UIColor grayColor].CGColor;
self.infoTF.delegate = self;
CGFloat width = self.infoTF.frame.size.width;
self.placholderLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 0, width-5, 30)];
self.placholderLabel.numberOfLines = 0;
self.placholderLabel.text = setInternational(@"live.weibosummay.string");
self.placholderLabel.textColor = setRGBColor(176, 176, 176);
self.placholderLabel.font = ZKP15Font;
[self.placholderLabel setHidden:NO];
[self.infoTF addSubview:_placholderLabel];
}
//
- (void)textViewDidChange:(UITextView*)textView{
if([textView.text length] == 0){
_placholderLabel.hidden = NO;
}else{
_placholderLabel.hidden = YES;//
}
UITextRange *selectedRange = [textView markedTextRange];
//
UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
// ,
if (selectedRange && pos) {
return;
}
NSString *nsTextContent = textView.text;
NSInteger existTextNum = nsTextContent.length;
if (existTextNum > MAX_LIMIT_NUMS){
// ( should )
NSString *s = [nsTextContent substringToIndex:MAX_LIMIT_NUMS];
[textView setText:s];
}
}
// (120 ) textview
- (BOOL)textView:(UITextView*)textView shouldChangeTextInRange:(NSRange)range
replacementText:(NSString*)text{
UITextRange *selectedRange = [textView markedTextRange];
//
UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];
//
if (selectedRange && pos) {
NSInteger startOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.start];
NSInteger endOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.end];
NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);
if (offsetRange.location < MAX_LIMIT_NUMS) {
return YES;
}else{
return NO;
}
}
NSString *comcatstr = [textView.text stringByReplacingCharactersInRange:range withString:text];
NSInteger caninputlen = MAX_LIMIT_NUMS - comcatstr.length;
if (caninputlen >= 0){
return YES;
}else{
NSInteger len = text.length + caninputlen;
// text.length + caninputlen < 0 , rg.length
NSRange rg = {0,MAX(len,0)};
if (rg.length > 0){
NSString *s = @"";
// asc ( NO)
BOOL asc = [text canBeConvertedToEncoding:NSASCIIStringEncoding];
if (asc) {
s = [text substringWithRange:rg];// ascii
}else{
__block NSInteger idx = 0;
__block NSString *trimString = @"";//
// , emoji unicode
[text enumerateSubstringsInRange:NSMakeRange(0, [text length])
options:NSStringEnumerationByComposedCharacterSequences
usingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) {
NSInteger steplen = substring.length;
if (idx >= rg.length) {
*stop = YES; // break,
return ;
}
trimString = [trimString stringByAppendingString:substring];
idx = idx + steplen;// ,
}];
s = trimString;
}
//rang ( YES didchange )
[textView setText:[textView.text stringByReplacingCharactersInRange:range withString:s]];
}
return NO;
}
}
총결산이상 은 이 글 의 전체 내용 입 니 다.본 고 는 아직도 부족 합 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.