- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用以下代码修改框架大小以适应显示/消失的键盘:
- (void)moveCodeViewForKeyboard:(NSNotification*)aNotification up:(BOOL)up {
NSDictionary* userInfo = [aNotification userInfo];
NSTimeInterval animationDuration;
UIViewAnimationCurve animationCurve;
CGRect keyboardEndFrame;
[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:animationDuration];
[UIView setAnimationCurve:animationCurve];
CGRect newFrame = codeView.frame;
CGRect keyboardFrame = [self.view convertRect:keyboardEndFrame toView:nil];
keyboardFrame.size.height += keyboardToolbar.frame.size.height;
keyboardFrame.size.height += 10;
newFrame.size.height -= keyboardFrame.size.height * (up?1:-1);
codeView.frame = newFrame;
[UIView commitAnimations];
}
此代码对其他一些 subview 重复,这些 subview 在显示/隐藏键盘时进行动画处理。
点击 UITextField 可以正确显示所有动画。但是,如果我随后立即点击 UITextView,则之前已设置动画的所有元素(UIToolbar、UITextView、UIWebView)都会恢复到其原始帧(位置和大小),并且将不再设置动画。如果我在 UITextField 为 firstResponder 时关闭键盘,元素将返回到原始框架但会再次激活。
非常奇怪...
只是因为我认为人们会问:
- (void)textFieldDidEndEditing:(UITextField *)textField
{
NSLog(@"textFieldDidEndEditing");
}
提前致谢!
最佳答案
您的项目是否设置为使用 autolayout
?如果是,则在您使用 Interface Builder 时会自动为您创建约束,并且仅更改组件的框架是不够的,您需要调整对这些组件的约束。您通常通过将约束链接到 IBOutlet
属性并修改它们的 constant
属性来做到这一点。
关于ios - UITextField 丢失 firstResponder 恢复帧动画/修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14575235/
如果我目前没有与应用程序进行任何交互(没有选择文本字段等...),是否还有第一响应者对象?正如我测试的那样,如果我向响应者链发送一条消息,那么当前的 ViewController.view 会收到它,
这个问题在这里已经有了答案: first responder is not being set correctly (2 个答案) 已关闭10 年前。
我创建了一个应用程序,在 ViewController.m 和 viewDidLoad 中,我编写了以下代码 for (UIView* v in self.view.subviews){
我正在尝试让摇动手势起作用。这是一些代码 在我的实现文件中 - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
对于我的自定义单元格,举个简单的例子,我只有一个 UITextField,有没有办法让 刚刚插入的单元格 becomeFirstResponder insertRowsAtIndexPaths ? 我
我需要跟踪哪个文本字段是我的自定义键盘工作的 firstResponder。在下面的代码中,我大大简化了我的程序,但这是问题的要点: @implementation SimplePickerViewC
我在让文本字段接受 becomeFirstResponder 指令时遇到问题。 我提供了一种自定义机制来在导航栏中创建标题。我有另一个 View Controller 成功地使用了同样的技术。在 vi
为什么我的 InterfaceBuilder 文件中的 FirstResponder 缺少 redo: 连接(在 Received Actions 列表中)? undo: 存在,但 redo: 不存在
你知道(你能看到)为什么我不能退出 FirstResponder 并隐藏键盘吗? 仅供引用:Xcode 9 import UIKit class ViewController: UIViewContr
所以我正在制作一个应用程序,但在从 UISearchBar 和 UITextFields 中关闭键盘时遇到了一些问题。这是我的应用程序的结构: NavigationController -> View
我正在开发一个具有主窗口和多个面板窗口的 Cocoa 应用程序。 当用户通过单击主窗口等离开文本字段时,我需要在 NSTextField(位于面板窗口上)上自动保存一些文本。到目前为止,我已经尝试通过
我有一个 UITextView。我实现了一个导航栏 UIBarButtonItem 来响应触摸并为我的 UITextView 退出 firstResponder。 但是,当调用选择器方法时,键盘不会消
我在 tableviewcontroller 中设置了一个 searchBar。我引用了这个类似的问题 UISearchBar cannot become first responder after
我有一个 Mac 应用程序,它由一个窗口组成,其中包含数量可变的 Pane ,每个 Pane 都包含一个表格 View 。该窗口有一个带有按钮的工具栏,我希望当前选定 Pane 的 VC 能够处理验证
在viewDidLoad()中: searchController = UISearchController(searchResultsController: nil) let cancelButto
我有一个名为 songInfoView 的 View ,其中包含 3 个 UITextFields 和一个 UIButton。我在父 View 中创建一个临时 UITextField 以调出键盘并将
我知道这个问题可能有很多关于 SO 的答案。但是在尝试了在互联网上找到的所有解决方案之后(加上我的一些自定义发明..)我仍然无法实现我想要实现的目标。 故事是这样的: 我有一个 UICollectio
我有四个 UITextField,每个代表 OTP 的一个数字。我希望控件在用户输入代码时转移到连续的文本字段。我的实现如下。 extension FillSignUpCodeController:
我有 UIViewController 并为其 View 创建了自定义类。顺便说一句,我在该类中重新定义了方法“canBecomeFirstResponder”,因此它始终返回 true。当调用 vi
我使用以下代码修改框架大小以适应显示/消失的键盘: - (void)moveCodeViewForKeyboard:(NSNotification*)aNotification up:(BOOL)up
我是一名优秀的程序员,十分优秀!