오늘 아침에 저는 사용자로부터 입력 문자열 하나를 얻기 위해 UIAlertView
을 해킹하는 어딘가에서 발견 된 (예전 앱에서 사용 된) 일부 코드를 살펴 보았습니다. 그것은 과도한 목적을위한 것이고 어리석은 것처럼 보이지만 나는 더 간단한 방법을 본 적이 없습니다. 나는 다음과 같은 접근법을 생각해 냈다. 은 (iPad 5.1.1 및 시뮬레이터)으로 작동한다.inputAccessoryView를 실제 입력에 사용할 수 있습니까?
내 질문에는 다소 제한이 없지만 본질적으로 전략으로 중단되는 조건이 있습니다 : 액세서리보기가있는 화면 외부 텍스트 필드 만들기, 액세서리보기에 프록시 텍스트 필드 넣기 및 다양한 속성 설정을 프록시로 전달 하시겠습니까?
PMKeyboardTextField.h :
#import <UIKit/UIKit.h>
@interface PMKeyboardTextField : UITextField
- (id)initWithPrompt:(NSString *)prompt;
@end
PMKeyboardTextField.m :
#import "PMKeyboardTextField.h"
@interface PMKeyboardTextField()
@property (nonatomic, strong) UITextField *inputField;
@end
@implementation PMKeyboardTextField
@synthesize inputField = _inputField;
- (id)initWithPrompt:(NSString *)prompt {
self = [super initWithFrame:CGRectMake(-1, -1, 1, 1)];
if (self) {
UIView *accessory = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 72)];
[accessory setBackgroundColor:[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:0.8]];
UILabel *getLabel = [[UILabel alloc] initWithFrame:CGRectMake(8, 8, 284, 21)];
[getLabel setBackgroundColor:[UIColor clearColor]];
getLabel.text = prompt;
[accessory addSubview:getLabel];
self.inputField = [[UITextField alloc] initWithFrame:CGRectMake(18, 37, 264, 31)];
[accessory addSubview:self.inputField];
self.inputAccessoryView = accessory;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidShow)
name:UIKeyboardDidShowNotification
object:nil];
}
return self;
}
- (void)keyboardDidShow {
[self.inputField becomeFirstResponder];
}
- (id<UITextFieldDelegate>)delegate {
return self.inputField.delegate;
}
- (void)setDelegate:(id<UITextFieldDelegate>)delegate {
self.inputField.delegate = delegate;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end
실제로 이것은 경고보기를 만들지 않고도 모든보기에서 작동하기위한 것입니다. (내가 실제로 염두에두고있는 것은 누군가가 테이블 뷰에 뭔가를 추가하기 위해 '+'를 눌렀을 때 테이블 테이블 셀에 편집 가능한 필드를 넣지 않고 이름을 지정하고 싶을 때를위한 것입니다. .or 그렇지 않으면 불필요한 경고보기를 넣어.) –
그 경우에는 액세서리 표시 줄을 최상위보기의 하단 가장자리에 일반 하위보기로 추가하고 그 안에있는 텍스트 필드에'becomeFirstResponder'를 보내고 슬라이드 그것은 UIKeyboardWillShowNotification을 기반으로합니다. –