ObjC iOS11:在 inputAccessoryView 中成为第一响应者时,TextField 不显示

Posted

技术标签:

【中文标题】ObjC iOS11:在 inputAccessoryView 中成为第一响应者时,TextField 不显示【英文标题】:ObjC iOS11: TextField doesn't show up when becoming first responder in inputAccessoryView 【发布时间】:2017-08-17 14:54:00 【问题描述】:

所以当键盘出现时,我有这段代码来创建我的 inputAccessoryView:

self.toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 1024, 44)];;
self.toolbar.backgroundColor = [UIColor blueColor];

NSMutableArray *toolbarItems = [[NSMutableArray alloc] init];

UILabel *nrLabel = [[UILabel alloc] initWithFrame:CGRectMake(7, 3, 140, 21)];
nrLabel.text = @"Number:";
[toolbarItems addObject:[[UIBarButtonItem alloc] initWithCustomView:nrLabel]];

self.nrTextField = [[UITextField alloc] initWithFrame:CGRectMake(8, 8, 140, 28)];
self.nrTextField.backgroundColor = [UIColor whiteColor];
[toolbarItems addObject:[[UIBarButtonItem alloc] initWithCustomView:self.nrTextField]];

UILabel *amountLabel = [[UILabel alloc] initWithFrame:CGRectMake(7, 3, 100, 21)];
amountLabel.text = @"Amount:";
[toolbarItems addObject:[[UIBarButtonItem alloc] initWithCustomView:amountLabel]];

self.amountTextField = [[UITextField alloc] initWithFrame:CGRectMake(8, 8, 100, 28)];
self.amountTextField.backgroundColor = [UIColor whiteColor];
[toolbarItems addObject:[[UIBarButtonItem alloc] initWithCustomView:self.amountTextField]];

self.toolbar.items = toolbarItems;
self.toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth;

[self.nrTextField becomeFirstResponder];
return self.toolbar;

只要我不告诉 nrTextField 成为第一响应者,它就可以正常工作。这样做是否违法?

【问题讨论】:

【参考方案1】:

因为这个 UIToolbar 应该是键盘的扩展,所以我必须在正确的时间调用 becomeFirstResponder。 所以我写了一个keyboardDidShow方法并通过NSNotification调用它。在这种方法中,我将 TextField 设置为第一响应者。

【讨论】:

以上是关于ObjC iOS11:在 inputAccessoryView 中成为第一响应者时,TextField 不显示的主要内容,如果未能解决你的问题,请参考以下文章

Firebase、Fabric 和 Crashlytics,带有 -ObjC 链接器标志,没有 Cocoapods iOS

iOS 设备上 ObjC 对象的安全解除分配

dyld:惰性符号绑定失败:找不到符号:_objc_loadWeak

iOS(ObjC)PromiseKit - 在承诺中返回承诺

iOS swift objc_setAssociatedObject和objc_getAssociatedObject使用

IOS objc_msgSend 32位和64位