2013-03-28 5 views
0

Я разрабатываю приложение iphone как новичок. Я динамически создавать UItextFields какДинамически созданное положение экрана uitextfield

for (int i = 0; i <= currentAnswerLen; i++) { 
    [textField4 setTag:i]; 
    textField4 = [[UITextField alloc] initWithFrame:CGRectMake((50 + (i * 40)), 180, 30, 35)]; 
etc....... 
} 

Вопрос в том, когда я щелкая поле клавиатуры появляется и текстовые поля не могут быть видны. На них появляется клавиатура. Как изменить положение текстовых полей при появлении клавиатуры?

thanx заранее.

ответ

0

В интерфейсе добавить эту переменную

@interface example : UIViewController 
{ 
    CGFloat animatedDistance; 

} 

В классе реализации добавить

static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3; 
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2; 
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8; 
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216; 
static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162; 

Затем добавьте эти два метода делегата

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    CGRect textFieldRect = [self.view.window convertRect:textField.bounds fromView:textField]; 
    CGRect viewRect = [self.view.window convertRect:self.view.bounds fromView:self.view]; 

    CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height; 
    CGFloat numerator = midline - viewRect.origin.y - MINIMUM_SCROLL_FRACTION * viewRect.size.height; 
    CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) * viewRect.size.height; 
    CGFloat heightFraction = numerator/denominator; 

    if (heightFraction < 0.0) 
    { 
     heightFraction = 0.0; 
    } 
    else if (heightFraction > 1.0) 
    { 
     heightFraction = 1.0; 
    } 

    UIInterfaceOrientation orientation = 
    [[UIApplication sharedApplication] statusBarOrientation]; 
    if (orientation == UIInterfaceOrientationPortrait || 
     orientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction); 
    } 
    else 
    { 
     animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction); 
    } 

    CGRect viewFrame = self.view.frame; 
    viewFrame.origin.y -= animatedDistance; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 

    [self.view setFrame:viewFrame]; 

    [UIView commitAnimations]; 

} 

- (void)textFieldDidEndEditing:(UITextField *)textField 
{ 
    CGRect viewFrame = self.view.frame; 
    viewFrame.origin.y += animatedDistance; 

    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION]; 

    [self.view setFrame:viewFrame]; 

    [UIView commitAnimations]; 

} 

Тогда просто помните установить y наш делегат textField.

+0

thanx man работает как очарование! – koray

1

Добавьте UIScrollView в свой Xib и сделайте соединение IBOutlet, которое добавит все ярлыки, которые вы создаете динамически. Я сделал некоторые изменения в вашем коде. Его работа прекрасна.

-(void)setAnswerField 
{ 
    int len = 10; 
    int commonSpace = 20; 
    for (int i=0;i<=len;i++) 
    { 
     if(i != 0) 
      commonSpace += 40; 
     textF=[[UITextField alloc] initWithFrame:CGRectMake(((i * 60))+commonSpace,180,60,35)]; 
     [textF setTag:i]; 
     [textF setDelegate:self]; 
     [textF setReturnKeyType:UIReturnKeyDone]; 
     [textF setBackgroundColor:[UIColor grayColor]]; 
     [textF addTarget:self action:@selector(textFieldFinished:) forControlEvents:UIControlEventEditingDidEndOnExit]; 
     textF.clearButtonMode=UITextFieldViewModeWhileEditing; 
     [textF addTarget:self action:@selector(keyDown:)forControlEvents:UIControlEventEditingDidEndOnExit]; 
     [_textfieldsScrollView addSubview:textF]; 
    } 

    _textfieldsScrollView.contentSize=CGSizeMake(1000, 500); 
} 

при нажатии текстового поля метода textViewDidBeginEditing огня, просто изменить содержимое от заданного значения, как это.

- (void)textViewDidBeginEditing:(UITextView *)textView 
{ 

     [_textfieldsScrollView setContentSize:CGSizeMake(320, 400)]; 
     [_textfieldsScrollView setContentOffset:CGPointMake(0, 100) animated:YES]; 

} 

После этого вернитесь в исходное положение следующим образом.

- (void)textViewDidEndEditing:(UITextView *)textView 
{ 
    //Back to normal state. 
    [_textfieldsScrollView setContentOffset:CGPointMake(0, 0) animated:YES];  
} 
+0

на самом деле ваш ответ имеет смысл, но я думаю, что я чего-то не хватает; Я добавил текстовое поле для прокрутки, когда динамически создается как [editScrollView addSubview: textField]; но текстовые поля больше не появляются на экране при запуске приложения! – koray

+0

опубликовать весь код для динамического добавления тестового поля. – Ganapathy

+0

- (void) setAnswerField { for (int i = 0; i <= len; i ++) { [textF setTag: i]; [textF setDelegate: self]; [textF setReturnKeyType: UIReturnKeyDone]; [textF addTarget: self action: @selector (textFieldFinished:) forControlEvents: UIControlEventEditingDidEndOnExit]; textF = [[UITextField alloc] initWithFrame: CGRectMake ((50 + (i * 40)), 180,30,35)]; textF.clearButtonMode = UITextFieldViewModeWhileEditing; [textF addTarget: self action: @selector (keyDown:) forControlEvents: UIControlEventEditingDidEndOnExit]; [_textfieldsScrollView addSubview: textF]; }} – koray

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