对于某些UITextView字段,我有一个漂亮的vanilla inputAccessoryView工具栏.上一个,下一个和完成按钮.我将它们放在UIViewController类中,并将它们分配给UITextFields,如下所示:
self.outPlayerOneTextField.inputAccessoryView = myAccessoryVc.view;
Run Code Online (Sandbox Code Playgroud)
这在iOS 7中运行良好.对于iOS 8,它现在重叠键盘的顶部,如下所示:

什么改变了什么指针?或者将它包装在视图控制器中并不是一件好事吗?
我上面有一个inputAccessoryView和一个UITableView,类似于消息应用程序的那个。keyboardDismiss表视图的模式是交互式的。我一直在尝试解决如何向 tableview 添加约束以使其始终位于输入附件视图上方,即使在向下拖动键盘时也是如此。但是我还没有找到一种方法来做到这一点(因为它们不在同一个“视图”中)。有没有人找到一种方法来做到这一点?
在我的swift应用程序中,我试图隐藏inputAccessoryView,该视图显示用户点击webview中的文本字段.
以下是尝试执行此操作的代码:
func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
var keyboardView = UIApplication.sharedApplication().windows.last!.subviews.first!
keyboardView.inputAccessoryView = nil
}
}
Run Code Online (Sandbox Code Playgroud)
但是我收到了这个错误:
Cannot assign to property: ‘inputAccessoryView’ is a get-only property
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?有关如何使其工作的任何想法?
我在VC中实现了自己的inputAccessoryView,该VC由推送UINavigationController。
VC的外观如下:注意底部的inputAccessoryView(带有按钮和文本字段的白条)
![1]](https://i.stack.imgur.com/jxuNk.png)
当我从屏幕的左向右滑动(以关闭当前的VC并返回)时,inputAccessoryView向下移动并消失。另外,如果我在任意位置停止滑动手势并让当前的VC跳回(这样就不会被关闭),inputAccessoryView也会向下移动并消失。
我在移动时附加了另一张照片:
![2]](https://i.stack.imgur.com/uUipU.png)
VC跳回后的另一个:
![3]](https://i.stack.imgur.com/L8uJO.png)
如您所见,inputAccessoryView已消失。
我的一段代码:
private final lazy var inputContainerView: UIView = {
let containerView = UIView()
containerView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: 50)
[...]
return containerView
}()
[...]
override var inputAccessoryView: UIView? {
return inputContainerView
}
override var canBecomeFirstResponder: Bool {
return true
}
Run Code Online (Sandbox Code Playgroud) 我想在Decimal Pad键盘上添加一个"Done"按钮和一个分段控件.理想情况下,我想在Interface Builder中使用自动布局布置键盘附件视图.
这甚至可能吗?我是否创建了一个新的XIB,或者我可以在现有的Storyboard场景中以某种方式创建它?如何将附件视图附加到相应的文本字段?
这是易如反掌增加一个inputAccessoryView上UITextField,UITextView或UISearchBar.但是,就UIView我所知,没有明显而简单的方法可以为你的基本添加一个!
我有一个UIView遵循UIKeyInput协议的子类.它接收键盘输入,做的东西,是不相关的输入文字,所以我宁愿不强迫它继承前者规定的意见,因为它增加了膨胀和会暴露了一堆没有做任何属性,加上我我需要解决这些类本身发生的文本条目(更膨胀).
但是,我UIView确实需要在其显示的键盘上输入附件视图才能正常工作.
有什么简单的方法可以解决这个问题吗?我是否必须UIKeyboardWillShowNotification在UIView子类中注册为观察者并手动将子视图作为附件视图添加到其中?
我知道视图控制器必须是 firstResponder 才能使 inputAccessory 保持在底部。我正在使用自定义 inputView/键盘。我可以通过删除 inputView 但不辞职第一响应者来使用完成按钮手动关闭它。但是,当我启用交互式拖动以在我的滚动视图上关闭时,代码会自动退出第一响应者。那么我怎样才能使用交互式拖动来关闭并保持我的视图控制器作为第一响应者呢?以前有人做过这个吗?我想也许这是不可能的,我可能需要使用手势识别器制作我自己的交互式拖动来消除。
更多信息:我有一个按钮,可以在标准键盘和我的自定义键盘之间切换。我已经看到驳回这些原因 2 键盘确实驳回了通知。我以为我可以在 keyboardDidHide 方法中成为 firstResponder ,但这并没有很好地工作,因为我无法区分手动关闭键盘的时间和交互式拖动的时间。这很重要,因为当我手动关闭时,我不需要重新加载输入视图或成为第一响应者,因为我已经处理了它。
任何建议都会很棒。我试图在 UIViewController 级别上使用 inputView 和 inputAccessoryView 。
我正在尝试复制Facebook Messenger App,其中有一个UITextView连接到键盘的顶部.
由于这个应用程序的性质,我需要view连接,而不是ScrollView在键盘出现时手动上下滚动.
这可以通过使用a来实现inputAccessoryView.
我在这里阅读了文档.
文档非常简短,并说:
"此属性通常用于将附件视图附加到为UITextField和UITextView对象呈现的系统提供的键盘.
此只读属性的值为nil.如果要将自定义控件附加到系统提供的输入视图(例如系统键盘)或自定义输入视图(您在inputView属性中提供的视图),请在UIResponder子类中将此属性重新声明为read-write.
然后,您可以使用此属性来管理自定义附件视图.当接收器成为第一响应者时,响应者基础设施将附件视图附加到适当的输入视图,然后再显示它.
我试过宣布一个属性
@interface CommentViewController ()
@property (nonatomic, readwrite, retain) UIView *inputAccessoryView;
@end
Run Code Online (Sandbox Code Playgroud)
然后设置它:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 20, 320, 100)];
[view setBackgroundColor:[UIColor greenColor]];
self.inputAccessoryView = view;
}
Run Code Online (Sandbox Code Playgroud)
然后我试着调用这两个:
[self.tableView becomeFirstResponder];
[view becomeFirstResponder];
什么都没发生.我究竟做错了什么?
*注意 - 额外信息:我使用的UITableViewController是我希望UIView附加的inputAccessoryView.一旦我得到了视图工作,那么我将添加一个UITextView和更多,但这主要是一个例子.
任何帮助是极大的赞赏!
我已经添加InputAccessoryView到我的键盘消失。它很好用。但在某些情况下ViewController它没有出现。即使那个方法没有调用。
我有一个按钮。当我点击它时,我的文本字段会自动成为第一响应者。(单击该按钮时,光标聚焦在 textField 上)键盘即将出现,但输入附件视图未出现。
我正在 iOS 8.2 设备上测试这个。这是我的代码
在 viewDidload
// for search------------------
UIView *srchPadView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 20, 30)];
[srchtextbox setLeftView:srchPadView];
[srchtextbox setLeftViewMode:UITextFieldViewModeAlways];
srchtextbox.attributedPlaceholder=[[NSAttributedString alloc] initWithString:alertStrings.strSearch attributes:@{NSForegroundColorAttributeName: [UIColor colorWithRed:1 green:1 blue:1 alpha:0.6]}];
[srchtextbox setTextColor:[UIColor whiteColor]];
srchtextbox.delegate=self;
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(textFieldTextDidChangeOneCI:)
name:UITextFieldTextDidChangeNotification
object:srchtextbox];
Run Code Online (Sandbox Code Playgroud)
在文本字段更改方法中
-(void)textFieldTextDidChangeOneCI:(NSNotification *)notification
{
isSearching=YES;
[NSObject cancelPreviousPerformRequestsWithTarget:self
selector:@selector(getSongs)
object:nil];
loading=YES;
[mainactivityindicator startAnimating];
songsArray=[[NSMutableArray alloc]init];
songstable.hidden=YES;
startRec=0;
[self performSelectorInBackground:@selector(getSongs) withObject:nil];
}
Run Code Online (Sandbox Code Playgroud)
然后
- (UIView *)inputAccessoryView {
if (!inputAccessoryView) {
CGRect accessFrame = CGRectMake(0.0, 0.0, 320, …Run Code Online (Sandbox Code Playgroud) 我在视图控制器上为我的UIToolBar/Accessory View设置了以下设置
@IBOutlet var inputFieldView: UIToolbar!
override var canBecomeFirstResponder: Bool{
return true
}
override var inputAccessoryView: UIView?{
return self.inputFieldView
}
Run Code Online (Sandbox Code Playgroud)
然后在我的viewDidLoad里面我有:
let seperator = UIView(frame: CGRect(x:0 , y: 0, width: ScreenSize.width(), height: 1))
seperator.backgroundColor = UIColor.lightBackground
self.inputFieldView.addSubview(seperator)
self.inputFieldView.isTranslucent = false
self.inputFieldView.setShadowImage(UIImage(), forToolbarPosition: .any)
self.inputFieldView.setBackgroundImage(UIImage(), forToolbarPosition: .any, barMetrics: .default)
self.inputFieldView.removeFromSuperview()
Run Code Online (Sandbox Code Playgroud)
这对于ios版本10和9非常有用.它是带有"发送"按钮的文本视图.它位于屏幕的底部,按下后,成为第一响应者,允许键盘上升并正确定位.
使用ios 11时,我甚至无法在底部点击它,所以我根本无法打字.
我在这里附加了模拟器屏幕截图和视图调试窗口。 xcode视图调试器和 模拟器屏幕截图
如您所见,inputAccessoryView在模拟器中可见,但在视觉调试中不可见,并且不明白为什么,请帮助:)
inputAccessoryView的代码:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
view.backgroundColor = .blue
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override var inputAccessoryView: UIView? {
let v = UIView.init(frame: CGRect.init(x: 0, y: 0, width: view.frame.size.width, height: 60))
v.backgroundColor = .red
let label = UILabel()
label.textAlignment = .center
label.translatesAutoresizingMaskIntoConstraints = false
v.addSubview(label)
label.text = …Run Code Online (Sandbox Code Playgroud) ios ×10
objective-c ×5
swift ×3
iphone ×2
uitableview ×2
autolayout ×1
debugging ×1
ios11 ×1
ios8 ×1
swift3 ×1
uistoryboard ×1
uitextfield ×1
uiview ×1
uiwebview ×1
xcode ×1