试图理解 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。
在 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。