私のプロジェクトでは、「美しい」テキストフィールドを作成するために角を丸くした白い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]を呼び出します。
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];
すべてが期待どおりに動作し、テキストフィールドがタッチに反応する:私はちょうどこのように私のコンテナ内BSCustomTextFieldインラインのコードを埋め込む場合
しかし、興味深い部分は、です。 searchTextFieldのタイプは、各ケースのヘッダーファイルに適切に設定されています。唯一の違いは、最初のケースではUIButtonとUITextFiledにUIViewを追加ラッピングしていることです。テキストフィールドを最初のレスポンダーにするために何をすべきかわかりません。
事前にどうもありがとう、 ローマ
[[btnTextFieldContainer層] setBorderWidth:0。];浮動小数点値を含まない – raaz
申し訳ありませんが、正確に何を意味するのかよくわかりません。 "0"浮動小数点値で、私が期待しているのとまったく同じ効果があります。つまり、UIButtonレイヤの境界をゼロに設定します。 – Romanticus