2014-08-28 6 views
0

У меня есть родительский контроль над объектом. У меня есть пользовательский вид, когда этот пользовательский вид инициализирован. Я настраиваю другой пользовательский вид, и это представление имеет UITextFields, но когда я нажимаю на UITextfield, клавиатура никогда показывает.UITextField - Клавиатура, не показывающая

ViewController:

// 
    // ViewController.m 
    // InstantForum 
    // 
    // Created by trikam patel on 27/08/2014. 
    // Copyright (c) 2014 trikam patel. All rights reserved. 
    // 

    #import "ViewController.h" 

    @interface ViewController() 

    @end 

    @implementation ViewController 
    @synthesize loginSignupControlView; 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad]; 

     self.view.userInteractionEnabled = YES; 
     CGRect screenRect = [[UIScreen mainScreen] applicationFrame]; 

     self.loginSignupControlView = [[LoginSignupControlView alloc] initWithFrame:CGRectMake(0, 0, screenRect.size.width, 68)]; 
     [self.view addSubview:self.loginSignupControlView]; 

     // Do any additional setup after loading the view, typically from a nib. 
    } 


    - (void)didReceiveMemoryWarning 
    { 
     [super didReceiveMemoryWarning]; 
     // Dispose of any resources that can be recreated. 
    } 

    @end 

пользовательский вид, который содержит другой пользовательский вид, который держит UITextFields

// 
    // LoginSignupControlView.m 
    // InstantForum 
    // 
    // Created by trikam patel on 28/08/2014. 
    // Copyright (c) 2014 trikam patel. All rights reserved. 
    // 

    #import "LoginSignupControlView.h" 
    #import "UIHelper.h" 
    #import "TextField.h" 

    @implementation LoginSignupControlView 

    - (id)initWithFrame:(CGRect)frame 
    { 
     self = [super initWithFrame:frame]; 
     if (self) { 
     [self createView]; 
     } 
     return self; 
    } 

    -(void)createView{ 

     self.isLogin = true; 
     self.userInteractionEnabled = YES; 

     self.backgroundColor = [UIColor colorWithRed:56.f/255 green:56.f/255 blue:57.f/255 alpha:1.0f]; 

     self.logoLabel = [UIHelper getUILabel:CGRectMake(10,35, 200, 14) :@"INSTANT FORUM" :[UIColor colorWithRed:222.0f/255 green:221.0f/255 blue:221.0f/255 alpha:1.0f] :[UIFont fontWithName:@"Helvetica" size:14]]; 
     [self addSubview:self.logoLabel]; 

     self.loginLabel = [UIHelper getUILabel:CGRectMake(190,35, 50, 14) :@"LOGIN" :[UIColor colorWithRed:106.0f/255 green:196.0f/255 blue:229.0f/255 alpha:1.0f] :[UIFont fontWithName:@"Helvetica" size:14]]; 
     [self addSubview:self.loginLabel]; 

     self.signupLabel = [UIHelper getUILabel:CGRectMake(250,35, 60, 14) :@"SIGNUP" :[UIColor colorWithRed:106.0f/255 green:196.0f/255 blue:229.0f/255 alpha:1.0f] :[UIFont fontWithName:@"Helvetica" size:14]]; 
     [self addSubview:self.signupLabel]; 

     [self setupView]; 

    } 

    -(void)setupView{ 

     if(self.isLogin){ 

     CGRect screenRect = [[UIScreen mainScreen] applicationFrame]; 

     self.loginView = [[LoginView alloc] initWithFrame:CGRectMake(0, 68, screenRect.size.width, 286)]; 
     [self addSubview:self.loginView]; 

     self.imageViewFN = [UIHelper getUIImageView:CGRectMake(10, 10, 300, 35) :@"textbox1.png"]; 
     [self.loginView addSubview:self.imageViewFN]; 

     TextField *fnText = [[TextField alloc] initWithFrame:CGRectMake(20, 10, 280, 35)]; 
     //fnText.backgroundColor = [UIColor clearColor]; 
     fnText.text = @"Enter First Name"; 
     fnText.userInteractionEnabled = YES; 
     fnText.enabled = YES; 
     fnText.font = [UIFont fontWithName:@"Helvetica" size:14]; 
     fnText.textColor = [UIColor colorWithRed:105.0f/255 green:121.0f/255 blue:221.0f/255 alpha:1.0f]; 
     [self.loginView addSubview:fnText]; 

     } 


    } 



    /* 
    // Only override drawRect: if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    - (void)drawRect:(CGRect)rect 
    { 
     // Drawing code 
    } 
    */ 

    @end 

Выборочная вид, LoginView

// 
    // LoginView.m 
    // InstantForum 
    // 
    // Created by trikam patel on 28/08/2014. 
    // Copyright (c) 2014 trikam patel. All rights reserved. 
    // 

    #import "LoginView.h" 

    @implementation LoginView 

    - (id)initWithFrame:(CGRect)frame 
    { 
     self = [super initWithFrame:frame]; 
     if (self) { 

     self.backgroundColor = [UIColor colorWithRed:61.0f/255 green:81.0f/255 blue:168.0f/255 alpha:1.0f]; 
     self.userInteractionEnabled = YES; 


     } 
     return self; 
    } 

    /* 
    // Only override drawRect: if you perform custom drawing. 
    // An empty implementation adversely affects performance during animation. 
    - (void)drawRect:(CGRect)rect 
    { 
     // Drawing code 
    } 
    */ 

    @end 

ответ

1

Одной из причин может быть отсутствие ясный делегат на UITextField.

Установите свой делегат экземпляра UITextField в качестве родительского контейнера (тот, который он добавлен), который позволит делегату и UITextField прослушивать изменения. Тогда вы могли бы еще больше подтолкнуть конверт и попытаться сфокусировать UITextField, когда вид контейнера инициализируется:

self.tfText.delegate = self; // too many selfs for clarity purpose 

И тогда вы могли бы реализовать следующее родительского вида:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 
    return YES; 
} 

Наконец, код- Разумеется, если LoginSignupViewController не нуждается в пользовательском вводе, просто установите для пользователя взаимодействие с NO и установите флажок в представлении, который потребует такого, в данном случае, контейнера UITextField.

Еще одна глупая причина, если вы запускаете приложение в симуляторе это может быть причиной:

«, когда ваш IOS Simulator открыт, перейдите (главное меню):

Оборудование> Клавиатура> снимите тот, который говорит somnething как «Имитация аппаратной клавиатуры»

Done!

Я надеюсь, что это помогает

+0

Im тестируя это на моем устройстве iPhone – redoc01

+0

@ redoc01 Вы представляете, как контроллер представлен модально? – Fer

+0

Контроллер вида является контроллером родительского представления – redoc01

0

Там могут быть совместно uple причин, почему клавиатура не отображается. Сначала убедитесь, что ваш UITextField является интерактивным в nib, а также в коде. (UITextField и иерархия супервизора должны быть интерактивными).

В следующий раз вы должны убедиться, что SuperViews UITextfield достаточно большие, поэтому UITextfield остается интерактивным. Вы можете дать разные цвета фона всем вашим представлениям и посмотреть, перекрываются ли некоторые из них.

Смежные вопросы