uisearchbar上的清除按钮根本不起作用

kev*_*.ng 6 iphone objective-c uikit uisearchbar ios

我以编程方式创建了一个搜索栏,并使用以下代码添加到我的视图中:

- (void)viewDidLoad
{
    searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(xPositionForSearchBar, yPositionForSearchBar, widthForSearchBar, heightForSearchBar)];
        UIView *bg = [[searchBar subviews] objectAtIndex:0];
        searchBar.delegate = self;
        searchBar.placeholder = @"Search record";
        for(UIView *view in searchBar.subviews){
            if([view isKindOfClass:[UITextField class]]){
                UITextField *tf = (UITextField *)view;
                tf.delegate = self;
                break;
            }
        }
        [bg removeFromSuperview];
        [self.view addSubview: searchBar];
}
Run Code Online (Sandbox Code Playgroud)

该代码使用UISearchBarDelegate和UITextFieldDelegate实现.

我试过用

- (void)searchBarCancelButtonClicked:(UISearchBar *)aSearchBar
{
    NSLog(@"cancel clicked");
    searchBar.text = @"";
    [aSearchBar resignFirstResponder];
}

- (BOOL)textFieldShouldClear:(UITextField *)textField
{
    NSLog(@"clear");
    [self performSelector:@selector(searchBarCancelButtonClicked:) withObject:searchBar afterDelay: 0.1];
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

然而,当我点击"清除按钮" - 里面有一个"X"的圆圈时,searchBar里面的文字根本就没有被清除.

当我在IB中实现它时,清除按钮有效.想知道为什么?

请多多建议,非常感谢.

Ort*_*ntz 5

如果您将搜索栏放置在父视图的边界之外,则可能会发生这种情况。然后,触摸不会正确传递到您的搜索栏。这也会影响复制和粘贴等文本编辑控件。


小智 0

我已经检查了您的代码,它在设备和模拟器上运行良好。