点击'X'元素时触发UISearchBar和事件

Jus*_*zic 9 iphone uisearchbar uisearchbardelegate

在UISearchBar上,有一个X元素允许您一次清除所有内容.有没有办法在发生这种情况时收到通知?

UISearchBarDelegate::searchBarCancelButtonClicked 仅在点击"取消"按钮时触发.

Tom*_*ift 7

UISearchBar没有该事件的委托方法.通过实现textDidChange:回调委托的方法并检查空字符串,您几乎可以获得所需的内容.

我不推荐它,但还有另一种可能的方法.在UISearchBar由的UITextField,这确实有一个委托方法当用户敲击清除按钮被称为(的textFieldShouldClear:).您可以UITextField通过遍历UISearchBar子视图来获取:

(这是在派生UISearchBar类的上下文中)

- (UIView*) textField
{
    for (UIView* v in self.subviews)
    {
        if ( [v isKindOfClass: [UITextField class]] )
            return v;
    }

    return nil;
}
Run Code Online (Sandbox Code Playgroud)

从这里开始,您可以UITextField委托重新分配给您自己的实现,注意将委托调用转发给旧委托.这样你就可以拦截textFieldShouldClear:.或者如果事实证明它是包含它UISearchBar的代表UITextField你可以调用textFieldShouldClear:...不理想,显然,但技术上可行.