내 프로젝트에서 "아름다운"텍스트 필드를 만들기 위해 둥근 모서리가있는 흰색 UIButton에 일반 UIButton에 포함 된 UITextField를 사용하고 있습니다. 이 코드는 다른 뷰에서 여러 번 사용되므로이 용도로 사용자 정의 UIView를 작성하기로 결정했습니다. 이 사용자 정의의 UIView의 코드 :UIView에 포함 된 UITextField가 터치 이벤트에 응답하지 않습니다
BSCustomTextField.h
#import <Foundation/Foundation.h>
@interface BSCustomTextField : UIView {
UIButton* btnTextFieldContainer;
UITextField* textField;
NSString* text;
}
@property (retain, nonatomic) UIButton* btnTextFieldContainer;
@property (retain, nonatomic) UITextField* textField;
@property (retain, nonatomic) NSString* text;
-(id)initWithPosition:(CGPoint)position;
@end
BSCustomTextField.m 그래서
#import "BSCustomTextField.h"
#import <QuartzCore/QuartzCore.h>
@implementation BSCustomTextField
@synthesize btnTextFieldContainer, textField, text;
-(id)initWithPosition:(CGPoint)position{
if (self == [super init]) {
btnTextFieldContainer = [[UIButton alloc] initWithFrame:CGRectMake(position.x, position.y, 260, 50)];
btnTextFieldContainer.backgroundColor = [UIColor whiteColor];
[[btnTextFieldContainer layer] setCornerRadius:3.];
[[btnTextFieldContainer layer] setMasksToBounds:YES];
[[btnTextFieldContainer layer] setBorderWidth:0.];
textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 240, 30)];
textField.backgroundColor = [UIColor whiteColor];
textField.clearButtonMode = UITextFieldViewModeAlways;
textField.returnKeyType = UIReturnKeySend;
textField.keyboardType = UIKeyboardTypeEmailAddress;
textField.font = [UIFont fontWithName:@"Helvetica-Bold" size:20.];
[btnTextFieldContainer addSubview:textField];
[self addSubview:btnTextFieldContainer];
}
return self;
}
-(void)dealloc{
[btnTextFieldContainer release];
[textField release];
[super dealloc];
}
@end
, 아래의 코드를 참조 (컨테이너 뷰의 있는 viewDidLoad이보기를 사용하는 경우 뷰는 원하는 위치에 올바르게 렌더링되고 정확하게 지정된 것처럼 보이지만 터치 이벤트에는 반응하지 않으므로 터치해도 첫 번째 응답자가되지 않습니다.
코드 :
searchTextField = [[BSCustomTextField alloc] initWithPosition:CGPointMake(30, 150)];
searchTextField.textField.placeholder = NSLocalizedString(@"lsUserName", @"");
[[(BSPlainHeaderWithBackButtonView*)self.view contentView] addSubview:searchTextField];
이 [searchTextField.textField becomeFirstResponder] 프로그램이 제대로 작동 나타날 때까지 키보드를 만드는 호출.
하지만, 난 그냥 같은 내 컨테이너에 BSCustomTextField 인라인 코드를 포함하면 흥미로운 부분이있다 : 예상과 텍스트 필드가 터치에 반응로UIButton* btnTextFieldContainer = [[UIButton alloc] initWithFrame:CGRectMake(30, 150, 260, 50)];
btnTextFieldContainer.backgroundColor = [UIColor whiteColor];
[[btnTextFieldContainer layer] setCornerRadius:3.];
[[btnTextFieldContainer layer] setMasksToBounds:YES];
[[btnTextFieldContainer layer] setBorderWidth:0.];
searchTextField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 240, 30)];
searchTextField.backgroundColor = [UIColor whiteColor];
searchTextField.clearButtonMode = UITextFieldViewModeAlways;
searchTextField.returnKeyType = UIReturnKeySend;
searchTextField.keyboardType = UIKeyboardTypeEmailAddress;
searchTextField.font = [UIFont fontWithName:@"Helvetica-Bold" size:20.];
searchTextField.placeholder = NSLocalizedString(@"lsUserName", @"");
[btnTextFieldContainer addSubview:searchTextField];
[[(BSPlainHeaderWithBackButtonView*)self.view contentView] addSubview:btnTextFieldContainer];
[btnTextFieldContainer release];
모든 작품. searchTextField의 유형은 각 경우에 대해 헤더 파일에 올바르게 설정됩니다. 유일한 차이점은 첫 번째 경우 UIButton 및 UITextFiled에 추가로 UIView를 래핑한다는 것입니다. 텍스트 필드를 첫 번째 응답자가되도록하려면 어떻게해야할지 모르겠습니다. 사전에
고마워, 로마
[[btnTextFieldContainer 레이어] setBorderWidth : 0.]; float 값이 포함되어 있지 않습니다. – raaz
죄송합니다. 정확히 무슨 뜻인지 이해하지 못합니다. "0" float 값이고 예상 한 효과가 정확히 있습니다. UIButton 레이어의 경계를 0으로 설정합니다. – Romanticus