如何隐藏iOS9中的快捷方式栏

时间:2015-09-16 10:56:21

标签: uitextfield ios9

我有一个带隐藏键盘的文本字段(因为我使用的是蓝牙)。但是,在iOS9中,快捷栏会一直显示。

有没有办法隐藏它?

非常感谢你!

8 个答案:

答案 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上创建一个类别,并覆盖leadingBarButtonGroupstrailingBarButtonGroups的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

在让用户隐藏它的情况下,如果文本字段再次成为第一响应者,则他们将不得不再次隐藏它。