试图理解 inputAccessoryView 方法

Trying to understand inputAccessoryView approach

在 iOS Objective-C 应用程序中,我试图在键盘顶部添加一个栏。我希望键盘通过位于此栏中的 UITextView 获得 "activated"。但是我无法显示栏。

我的理解:

- (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 不会

我在这种方法中做错了什么?

您没有正确使用 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)
}

这是绿色背景的输入附件视图的快照

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

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

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