我在这里阅读了很多关于这个主题的帖子,但我无法找到我的问题的答案,所以,希望你不会对另一个UIKeyboard帖子感到无聊:-)
在我的视图控制器的实现中,我添加了self
作为两个通知UIKeyboardWillShowNotification
和UIKeyboardWillHideNotification
的观察者,通过选择器keyboardWillShow:
和keyboardWillHide:
来处理通知。当我触摸UITextField
时,会调用keyboardWillShow:
方法,但是当我按下“完成”按钮(取消键盘)时,不会调用keyboardWillHide:
方法。
真的,我想让我的UITextField
在键盘右下角显示一个带有“隐藏按钮”的键盘,但我找不到合适的键盘类型。也许我需要将textfield retuntype设置为“... Done”。以这种方式,我看到“返回”键变为“完成”。
所以我将工具栏设置为UITextField
的{{1}},现在我可以使用“完成”按钮显示带有上方工具栏的标准键盘。当用户触摸该按钮时,我使用inputAccessoryView
方法隐藏键盘。
奇怪的是,当我致电resignFirstResponder
时,resignFirstResponder
未张贴;至少不调用UIKeyboardWillHideNotification
方法。
你对我有什么建议?我真的很想用带有向下箭头的小按钮显示一个键盘以隐藏键盘,但这个解决方案也可能是正确的,但我想调整视图大小并执行此操作我需要观察keyboardWillHide:
非常感谢您的帮助......
(ADDED :)
在UIKeyboardWillHideNotification
:
viewDidLoad
我从“你的”帖子之一接受了这些声明:-)但是willShow有效......
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:[[self view] window]];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:[[self view] window]];
中被指定为我的文字字段UIToolbar
的“完成”按钮的操作是:
inputAccessoryView
CLOSED: 好!当一个开发人员是愚蠢的......这是愚蠢的:-) :-)
这是我更正后的willHide方法:
-(void)keyboardDone {
[msgTextField resignFirstResponder];
首先,我要感谢大家帮助我做这项无用的工作。我想给你一些观点,所以我会尝试为每个答案提出一个“兴趣点”,但我需要选择正确的......难点...... :-)
再次打扰一下......我真的没有看到if()语句......
答案 0 :(得分:3)
如果您阅读UIWindow
的文档,则表示这些通知的通知对象为nil
。您将self.view.window
作为对象传递给addObserver:selector:name:object:
方法。请尝试传递nil
:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
答案 1 :(得分:1)
检查keyboardDone
是否真的被调用(即使用NSLog(@"%@", @"keyboard done called");
)。如果它被调用,但resignFirstResponder无法解除键盘,那么试试这个:
[self.view endEditing:YES];
请同时提供keyboardWillHide:
方法。
答案 2 :(得分:1)
要设置键盘以使其具有“完成”按钮,请执行以下操作:
1)设置视图控制器,使其实现UITextFieldDelegate。例如:
#import <UIKit/UIKit.h>
@interface TX_ViewController : UIViewController <UITextFieldDelegate>
@property (nonatomic, retain) IBOutlet UITextField *textField;
@end
2)在视图控制器实现文件中,使用以下代码设置键盘:
- (void)viewDidLoad
{
[self.textField setDelegate:self];
[self.textField setReturnKeyType:UIReturnKeyDone];
[self.textField addTarget:self action:@selector(textFieldFinished:) forControlEvents:UIControlEventEditingDidEndOnExit];
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
3)如果您希望在按下 DONE 按钮时执行某些操作,只需将以下功能添加到视图控制器的实现文件中:
- (IBAction)textFieldFinished:(id)sender
{
[sender resignFirstResponder];
}
此外,如果您使用“界面”构建器来创建界面,请不要忘记为TextField设置IBOutlet参考;否则,您的班级将不会收到来自XIB的消息。
我在一个示例应用程序中进行了设置,看看它是否有效,并且它确实按照您希望的方式执行。
答案 3 :(得分:0)
值得注意的是,当用户通过隐藏按钮隐藏软件键盘时,不会调用隐藏方法。再次调用show方法,但除主页行工具栏外,键盘几乎不在屏幕上。
答案 4 :(得分:0)
Swift $
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
func keyboardWillHide(notification: NSNotification){
print("keyboardWillHide")
}