试图理解 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 可见? 是的,当用户不打字时,键盘处于隐藏状态,我希望附件视图留在屏幕底部。 然后您将不得不制作一个自定义解决方案,您将在其中收听 UIKeyboardWillShowUIKeyboardWillHide 例如,在与此方法一起发送的 Notification 对象中,您可以获得键盘的高度并为您的自定义视图设置动画等等......【参考方案2】:

提供的不同解决方案有效,但要求我的 textView 位于 inputAccessoryView 之外。

我的解决方案基于page 上的可用工作,这完全符合我的期望。

简而言之,它所做的就是重写 inputAccessoryView 函数以提供动态构建的 UIView,其中包括 textView。

【讨论】:

以上是关于试图理解 inputAccessoryView 方法的主要内容,如果未能解决你的问题,请参考以下文章

inputAccessoryView 没有被移除

没有为 UITextField 正确添加 inputAccessoryView

inputAccessoryView 现在是只读的吗?

inputAccessoryView 类似 iOS Mail

如何将 UILabel 放在键盘的“inputAccessoryView”中?

InputAccessoryView 的子视图工具栏按钮不起作用