【发布时间】:2015-12-12 22:12:28
【问题描述】:
我有一个带有隐藏键盘的文本字段(因为我将它与蓝牙一起使用)。但是,在iOS9中,快捷栏一直出现。
有没有办法隐藏它?
非常感谢!
【问题讨论】:
标签: uitextfield ios9
我有一个带有隐藏键盘的文本字段(因为我将它与蓝牙一起使用)。但是,在iOS9中,快捷栏一直出现。
有没有办法隐藏它?
非常感谢!
【问题讨论】:
标签: uitextfield ios9
您可以传递您的文本字段名称来代替您要删除快捷栏的 userNameTextField。
UITextInputAssistantItem* item = [userNameTextField inputAssistantItem];
item.leadingBarButtonGroups = @[];
item.trailingBarButtonGroups = @[];
【讨论】:
is_grater__or_equal_than(9.0),否则在较低版本中会崩溃
autocorrectionType 也必须设置为.no,否则它仍然会显示建议
在 Swift 2.0 中
if #available(iOS 9.0, *) {
let item : UITextInputAssistantItem = yourTextView.inputAssistantItem
item.leadingBarButtonGroups = []
item.trailingBarButtonGroups = []
} else {
// Fallback on earlier versions
}
【讨论】:
我有同样的问题。于是开始搜索 SO。所以上面的内容帮助了我,但整个“如果 iOS9 的事情”可能最好这样框定:
if ([self respondsToSelector:@selector(inputAssistantItem)]) {
// iOS9.
UITextInputAssistantItem* item = [self inputAssistantItem];
item.leadingBarButtonGroups = @[];
item.trailingBarButtonGroups = @[];
}
幸运的是,我创建了一个 UITextField 的子类 (CHTextField),并且到处都在使用。因此,在覆盖的“init”方法中解决这个问题是一个非常容易的解决方法。
希望对你有帮助。
【讨论】:
只是在这里扩展其他答案。我拼凑了一些 Swift 2.0 代码,这些代码将遍历给定视图的所有子视图并禁用所有 UITextFields 和 UISearchBars 的 UITextInputAssistantItems。
func hideTheAssistantBar(view:UIView) {
//Check this view
for case let textField as UITextField in view.subviews {
let item : UITextInputAssistantItem = textField.inputAssistantItem
item.leadingBarButtonGroups = []
item.trailingBarButtonGroups = []
}
for case let searchBar as UISearchBar in view.subviews {
let item : UITextInputAssistantItem = searchBar.inputAssistantItem
item.leadingBarButtonGroups = []
item.trailingBarButtonGroups = []
}
//Now find this views subviews
let subviews = view.subviews
for subview : AnyObject in subviews {
if subview.isKindOfClass(UIView) {
hideTheAssistantBar(subview as! UIView)
}
}
}
然后你可以调用这个函数,传入你想要开始的任何视图。我在我的 ViewDidLoad() 方法中调用它,并像 hideTheAssistantBar(self.view) 一样传入 self.view。
我实际上更进一步满足了我的需求,并将这个函数添加到我用于公共代码的帮助器类中。因此,在我的viewDidLoad() 函数中,我实际上只是调用了helper.hideTheAssistantBar(self.view),然后我不必将该函数放入每个文件中。
希望这有助于寻找一种简单的方法从所有 UITextFields 和 UISearchBars 中一次性删除助手栏的人。
感谢@Arkader 提供递归查找所有子视图的快速代码。 Swift List Subviews
【讨论】:
或者,只需像这样在 Swift 2.0 中为 UITextField 创建一个扩展。
extension UITextField
{
public func hideAssistantBar()
{
if #available(iOS 9.0, *) {
let assistant = self.inputAssistantItem;
assistant.leadingBarButtonGroups = [];
assistant.trailingBarButtonGroups = [];
}
}
}
然后你可以在任何你喜欢的文本字段上调用 hideAssistantBar()。
@IBOutlet weak var myTextField: UITextField?;
override public func viewDidLoad() {
super.viewDidLoad();
myTextField?.hideAssistantbar();
}
【讨论】:
对应用中的所有文本字段执行此操作的一种简单方法是在 UITextInputAssistantItem 上创建一个类别并覆盖 leadingBarButtonGroups 和 trailingBarButtonGroups 的 getter,如下所示:
@implementation UITextInputAssistantItem (RemoveBars)
- (NSArray<UIBarButtonItemGroup *> *)leadingBarButtonGroups
{
return @[];
}
- (NSArray<UIBarButtonItemGroup *> *)trailingBarButtonGroups
{
return @[];
}
@end
这在 iOS 9.x 和 8.x 上对我有用,不需要任何条件代码。
请注意这一点,这会覆盖使用 UITextInputAssistantItem
【讨论】:
在 Swift 3.0 和 4.0
中self.textField.inputAssistantItem.leadingBarButtonGroups.removeAll()
self.textField.inputAssistantItem.trailingBarButtonGroups.removeAll()
【讨论】:
只是基于 Pranavan 发布的内容,因为在使用 Xcode 11 的 iOS 12 或 13 中将条形按钮组设置为空数组似乎不起作用。
let inputAssistantItem = textFieldForTypingText.inputAssistantItem
inputAssistantItem.leadingBarButtonGroups.removeAll()
inputAssistantItem.trailingBarButtonGroups.removeAll()
我把上面的代码放在 viewDidLoad() 函数中。
你也可以给用户选项:
inputAssistantItem.allowsHidingShortcuts = true
在让用户隐藏它的情况下,如果文本字段再次成为第一响应者,他们将不得不再次隐藏它。
【讨论】: