UITextField-eingebettet in eine UIView reagiert nicht auf touch-Ereignisse

In meinem Projekt verwende ich ein UITextField, das eingebettet ist in einen schlichten weißen UIButton mit abgerundeten Ecken, um einen "schönen" text-Feld. Dieser code ist mehrfach in verschiedenen Ansichten so habe ich beschlossen, erstellen Sie eine benutzerdefinierte UIView zu diesem Zweck. Der code für dieses benutzerdefinierte UIView:

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

So, wenn mit dieser Ansicht in der viewDidLoad der container-Ansicht (siehe code unten) wird die Ansicht korrekt gerendert auf die gewünschte position und sieht genauso aus wie angegeben, aber es reagiert nicht auf touch-Ereignisse und somit nicht zum first responder, wenn Sie berührt.

Code:

searchTextField = [[BSCustomTextField alloc] initWithPosition:CGPointMake(30, 150)];
searchTextField.textField.placeholder       = NSLocalizedString(@"lsUserName", @"");
[[(BSPlainHeaderWithBackButtonView*)self.view contentView] addSubview:searchTextField];

Aufrufen [searchTextField.textField becomeFirstResponder] programmgesteuert funktioniert einwandfrei und macht die Tastatur angezeigt.

Aber der interessante Teil ist, wenn ich den embed-code von BSCustomTextField inline in meinem container, genau wie diese:

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];

alles funktioniert wie erwartet und das Textfeld reagiert auf Berührungen. Die Art der searchTextField richtig eingestellt ist in der header-Datei für jeden Fall. Der einzige Unterschied ist, dass im ersten Fall habe ich eine zusätzliche Umhüllung UIView auf dem UIButton und die UITextFiled. Ich habe keine Ahnung, was zu tun ist, um das Textfeld zu werden first responder, die auf touch.

Vielen Dank im Voraus,
Roman

  • [[btnTextFieldContainer layer] setBorderWidth:0.]; enthalten keine float-Wert
  • Sorry, ich weiß nicht, klar zu verstehen, was genau du meinst. "0." ist ein float-Wert und hat genau die Wirkung die ich erwartet - es stellt die Grenze der UIButton Schicht auf null.
InformationsquelleAutor Romanticus | 2010-12-29
Schreibe einen Kommentar