【问题标题】:Trying to understand inputAccessoryView approach试图理解 inputAccessoryView 方法
【发布时间】: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吗?如果你想这样做。点击视图和视图应该在键盘上方。

标签: ios objective-c uiview inputaccessoryview


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-17
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多