试图理解 inputAccessoryView 方法
Posted
技术标签:
【中文标题】试图理解 inputAccessoryView 方法【英文标题】:Trying to understand inputAccessoryView approach 【发布时间】:2018-04-22 14:59:12 【问题描述】:在 ios Objective-C 应用程序中,我试图在键盘顶部设置一个栏。我希望键盘通过位于此栏中的 UITextView “激活”。但是我无法显示该栏。
我的理解:
- (void)viewDidLoad
myUIView=[[UIView alloc]initWithFrame:xxx]; // 1. Create an UIView that will serve as inputAccessoryView
myTextView=[[UITextView alloc]init]; // 2. Create a UItextView
[myUIView addSubview:myTextView]; // 3. Add it to the UIView
[myTextfield setInputAccessoryView:myUIView]; // 4. Set the UIview as being the inputAccessoryView of the textView
// [self.view addSubview:myUIView]; // If I do this, the view is displayed but the app crashes when tapping in the textField
但是视图没有显示,textView 也没有。 我试图将 textView 作为主控制器视图的子视图,当 textview 显示时,myUIView 没有
我在这种方法中做错了什么?
【问题讨论】:
你可以试试IQKeyboard作为你的accessoryView吗?如果你想这样做。点击视图和视图应该在键盘上方。 【参考方案1】:您没有正确使用InputAccessoryView
。您将UITextView
添加到InputAccessoryView
作为子视图,您的UITextView
应添加到view
(例如UIViewController
的视图)
您需要像您一样将InputAccessoryView
分配给UITextView
,就是这样,当键盘显示时,您的InputAccessoryView
视图将位于键盘区域上方。
查看下面的示例,了解如何在代码中添加它:
- (void)viewDidLoad
[super viewDidLoad];
UITextView *textView = [UITextView new];
textView.frame = CGRectMake(100, 100, 100, 40);
textView.backgroundColor = [UIColor redColor];
UIView *accessoryView = [UIView new];
accessoryView.frame = CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 44);
accessoryView.backgroundColor = [UIColor greenColor];
textView.inputAccessoryView = accessoryView;
[self.view addSubview:textView];
或 Swift 版本
override func viewDidLoad()
super.viewDidLoad()
let textView = UITextView()
textView.frame = CGRect(x: 100, y: 100, width: 100, height: 40)
textView.backgroundColor = .red
let accessoryView = UIView()
accessoryView.frame = CGRect(x: 0, y: 0, width: view.frame.size.width, height: 44)
accessoryView.backgroundColor = .green
textView.inputAccessoryView = accessoryView
view.addSubview(textField)
这是带有绿色背景的输入附件视图的快照
【讨论】:
谢谢拉迪斯拉夫。这确实更好,但是我现在有两个问题: 1. 我需要将文本字段放入附件视图中(或者至少显示在顶部,现在它不起作用,因为它在下面)。 2. 隐藏键盘时如何显示附件视图?目前仅在拉起键盘时显示。谢谢 InputAccessoryView 仅在UITextView
正在编辑时可见 - 这意味着您点击它并且您可以输入。因此,即使用户没有输入 UITextView
,您也需要 InputAccessoryView 可见?
是的,当用户不打字时,键盘处于隐藏状态,我希望附件视图留在屏幕底部。
然后您将不得不制作一个自定义解决方案,您将在其中收听 UIKeyboardWillShow
和 UIKeyboardWillHide
例如,在与此方法一起发送的 Notification
对象中,您可以获得键盘的高度并为您的自定义视图设置动画等等......【参考方案2】:
提供的不同解决方案有效,但要求我的 textView 位于 inputAccessoryView 之外。
我的解决方案基于page 上的可用工作,这完全符合我的期望。
简而言之,它所做的就是重写 inputAccessoryView 函数以提供动态构建的 UIView,其中包括 textView。
【讨论】:
以上是关于试图理解 inputAccessoryView 方法的主要内容,如果未能解决你的问题,请参考以下文章
没有为 UITextField 正确添加 inputAccessoryView
inputAccessoryView 类似 iOS Mail