浮动的表单

本例用UIView动画实现在编辑表单内容的时候表单上移一段距离的动画效果,以防止表单内容被弹出的输入键盘遮挡住。我们用Interface Builder来帮助我们布局,大体的页面结构是:根视图上丢一个UIImageView作为背景;丢一个UIView作为表单的载体,然后在在这个UIView上添加UITextField、UIButton等控件。然后在我们的主控制器中编写实现代码:

ViewController.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITextViewDelegate>
{
    CGPoint formViewCenter; // 记录formView的起始位置
    BOOL ifFormUp;          // 表单是否已经上移
}

@property (nonatomic,retain) IBOutlet UIView *formView;
@property (nonatomic,retain) IBOutlet UITextField *usernametf;
@property (nonatomic,retain) IBOutlet UITextField *passwordtf;

- (IBAction)backgroundBtnClicked:(id)sender;
- (IBAction)registerBtnClicked:(id)sender;
- (IBAction)loginBtnClicked:(id)sender;

-(void)formUp;   // 表单上移动画
-(void)formDown; // 表单下移动画
@end


ViewController.m

#import "ViewController.h"

@implementation ViewController
@synthesize formView,usernametf,passwordtf;

#pragma mark - view life cycle
- (void)viewDidLoad
{
    [super viewDidLoad];
	
    formView.backgroundColor = [UIColor clearColor];
    formViewCenter = formView.center;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    self.formView = nil;
    self.usernametf = nil;
    self.passwordtf = nil;
}

- (void)dealloc
{
    self.formView = nil;
    self.usernametf = nil;
    self.passwordtf = nil;
    [super dealloc];
}
#pragma mark - button actions
- (IBAction)backgroundBtnClicked:(id)sender
{
    NSLog(@"Clicking_backgroundBtn");
    if (ifFormUp) {
        [usernametf resignFirstResponder];
        [passwordtf resignFirstResponder];
        [self formDown];
    }
}

- (IBAction)registerBtnClicked:(id)sender
{
    
}

- (IBAction)loginBtnClicked:(id)sender
{
    
}

#pragma mark - form actions
// 表单上移
-(void)formUp
{
    if(!ifFormUp)
    {
        ifFormUp = YES;
        [UIView animateWithDuration:0.3 animations:^(void){
            CGPoint newCenter = formViewCenter;
            newCenter.y = 180.0f;
            formView.center = newCenter;
        }];
    }
}

// 表单下移
-(void)formDown
{
    if(ifFormUp)
    {
        ifFormUp = NO;
        [UIView animateWithDuration:0.3 animations:^(void){
            formView.center = formViewCenter;
        }];
    }
}

#pragma mark - UITextViewDelegate
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    if (!ifFormUp) {
        [self formUp];
        [textField becomeFirstResponder];
    }        
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    [self formDown];
    
    return YES;
}
@end


最终实现的效果如下:



源码下载:源码


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值