我有一个带隐藏键盘的文本字段(因为我使用的是蓝牙)。但是,在iOS9中,快捷栏会一直显示。
有没有办法隐藏它?
非常感谢你!
答案 0 :(得分:56)
您可以传递文本字段名称来代替要删除快捷工具栏的 userNameTextField 。
def somefunc( arg1 : String ) = {} // Any function with any arguments
def test[X,Y]( f : X => Y) = f
def main(args: Array[String]) {
test( somefunc )
}
答案 1 :(得分:13)
在Swift 2.0中
if #available(iOS 9.0, *) {
let item : UITextInputAssistantItem = yourTextView.inputAssistantItem
item.leadingBarButtonGroups = []
item.trailingBarButtonGroups = []
} else {
// Fallback on earlier versions
}
答案 2 :(得分:9)
我有同样的问题。所以开始搜索SO。所以上面帮助了我,但整体而言,“如果iOS9的东西”可能是最好的框架:
if ([self respondsToSelector:@selector(inputAssistantItem)]) {
// iOS9.
UITextInputAssistantItem* item = [self inputAssistantItem];
item.leadingBarButtonGroups = @[];
item.trailingBarButtonGroups = @[];
}
令人高兴的是,我创建了一个UITextField(CHTextField)的子类,并且随处可见。因此,在过度使用的“init”方法中解决这个问题非常容易。
希望它有所帮助。
答案 3 :(得分:7)
或者,只需在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();
}
答案 4 :(得分:5)
对您应用中的所有文字字段执行此操作的简便方法是在UITextInputAssistantItem
上创建一个类别,并覆盖leadingBarButtonGroups
和trailingBarButtonGroups
的getter,如下所示:
@implementation UITextInputAssistantItem (RemoveBars)
- (NSArray<UIBarButtonItemGroup *> *)leadingBarButtonGroups
{
return @[];
}
- (NSArray<UIBarButtonItemGroup *> *)trailingBarButtonGroups
{
return @[];
}
@end
这适用于iOS 9.x和8.x,不需要任何条件代码。
请注意,这会覆盖使用UITextInputAssistantItem
的一切的属性
答案 5 :(得分:4)
这里只是扩展其他答案。我拼凑了一些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()
方法中调用此方法,并像self.view
一样传入hideTheAssistantBar(self.view)
。
我实际上更进一步满足了我的需求,并将此函数添加到我用于公共代码的帮助器类中。因此,在我的viewDidLoad()
函数中,我实际上只是调用helper.hideTheAssistantBar(self.view)
,然后我不必将该函数放在每个文件中。
希望这有助于有人在一次失败中寻找一种简单的方法从所有UITextFields和UISearchBars中删除助手栏。
感谢@Arkader提供快速代码以递归方式查找所有子视图。 Swift List Subviews
答案 6 :(得分:1)
在 Swift 3.0 和 4.0
中self.textField.inputAssistantItem.leadingBarButtonGroups.removeAll()
self.textField.inputAssistantItem.trailingBarButtonGroups.removeAll()
答案 7 :(得分:0)
仅以Pranavan发布的内容为基础,因为使用Xcode 11在iOS 12或13中似乎无法将条形按钮组设置为空数组。
let inputAssistantItem = textFieldForTypingText.inputAssistantItem
inputAssistantItem.leadingBarButtonGroups.removeAll()
inputAssistantItem.trailingBarButtonGroups.removeAll()
我将上面的代码放在viewDidLoad()函数中。
您还可以将选项提供给用户:
inputAssistantItem.allowsHidingShortcuts = true
在让用户隐藏它的情况下,如果文本字段再次成为第一响应者,则他们将不得不再次隐藏它。