ios resignFirstResponder 重置动画

Posted

技术标签:

【中文标题】ios resignFirstResponder 重置动画【英文标题】:ios resignFirstResponder reset animation 【发布时间】:2012-12-30 14:51:00 【问题描述】:

首先对不起我的英语不好!

在我的应用程序中有一个 UIViewController 并且 UIView 在 subViewLogin 内被称为 subViewLogin 有 2 个 UITextField 被称为用户名和密码。当我的应用程序运行时 subViewLogin 被 UIViewAnimationCurveLinear 移动到位置。但是当我完成编辑 UITextField(调用 resignFirstResponder)subViewLogin 卷土重来定位。为什么?以及如何防止 subViewLogin 回到原来的位置?

这是我的代码。

//LoginViewController.h
#import <UIKit/UIKit.h>

@interface LoginViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *username;
@property (weak, nonatomic) IBOutlet UITextField *password;
@property (weak, nonatomic) IBOutlet UIImageView *background;
@property (weak, nonatomic) IBOutlet UIImageView *logoEnergy;
@property (weak, nonatomic) IBOutlet UIImageView *logoKmutl;
@property (weak, nonatomic) IBOutlet UIImageView *logoProjectname;
@property (weak, nonatomic) IBOutlet UIView *subviewLogin;

- (void)advoidSubviewFromKeyboard;
- (IBAction)usernameAndPasswordBeginEdit;
- (IBAction)dismissKeyboard;
@end

//LoginViewController.m
#import "LoginViewController.h"
@implementation LoginViewController

const float keyBoardPortraitHeight = 216;
const float keyBoardLandscapeHeight = 162;

@synthesize username, password, background, logoEnergy, logoKmutl, logoProjectname;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization

    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor=[UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]];
    UIView *subview = self.subviewLogin;
    subview.frame = CGRectMake(subview.frame.origin.x, self.view.frame.size.height, subview.frame.size.width, subview.frame.size.height);


- (void)viewDidAppear:(BOOL)animated

    [UIView
    animateWithDuration:0.3
    delay: 0.0
    options: UIViewAnimationCurveLinear
    animations:^
        UIView *subview = self.subviewLogin;
        subview.frame = CGRectMake(subview.frame.origin.x, self.view.frame.size.height-subview.frame.size.height-30, subview.frame.size.width, subview.frame.size.height);
    
    completion:^(BOOL finished)

    
    ];


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


- (void)advoidSubviewFromKeyboard

    [UIView
     animateWithDuration:0.3
     delay: 0.0
     options: UIViewAnimationCurveLinear
     animations:^
         self.view.frame = CGRectMake(self.view.frame.origin.x, -keyBoardPortraitHeight+30, self.view.frame.size.width, self.view.frame.size.height);
     
     completion:^(BOOL finished)

     
     ];


- (IBAction)usernameAndPasswordBeginEdit

    [self advoidSubviewFromKeyboard];


- (IBAction)dismissKeyboard

    NSLog(@"dismiss");
    //[self.username becomeFirstResponder];
    //[self.username resignFirstResponder];
    [self.subviewLogin endEditing:YES];
    //[self.view endEditing:YES];

@end

【问题讨论】:

【参考方案1】:

尽管这个问题是很久以前提出的,但这种行为现在仍然存在。我已经使用约束而不是更新元素的框架来解决它。示例:

func expand(with view: UIView, constraint: NSLayoutConstraint) 
    constraint.constant = self.isExpanded ? self.minHeight : self.maxHeight //set needed constant here
    UIView.animate(withDuration: expandDuration, animations: 
        self.arrowImageView.transform = self.isExpanded ? .identity : CGAffineTransform(rotationAngle: self.topAngle)
        view.layoutSubviews() //layout constraint's view subviews
    )  _ in
        self.isExpanded = !self.isExpanded
    

【讨论】:

以上是关于ios resignFirstResponder 重置动画的主要内容,如果未能解决你的问题,请参考以下文章

iOS UITextField resignFirstResponder 问题

RTL iOS9上奇怪的UITextField占位符行为

resignFirstResponder UITextView

ResignFirstResponder 不工作。

resignFirstResponder 没有在 iPad 中隐藏 UIkeyboard

MonoTouch:ResignFirstResponder() 问题