Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone “搜索栏取消”按钮不工作_Iphone_Objective C_Cocoa Touch_Uisearchbar - Fatal编程技术网

Iphone “搜索栏取消”按钮不工作

Iphone “搜索栏取消”按钮不工作,iphone,objective-c,cocoa-touch,uisearchbar,Iphone,Objective C,Cocoa Touch,Uisearchbar,我的应用程序有一个搜索栏,用于从由sqlite DB填充的表视图中搜索记录。 我的问题是,当视图打开时,“取消”按钮没有启用,而且我不能触摸它,就像一个图像一样。它在那里,但没有任何操作。 当我们点击搜索栏上的文本时,取消按钮将被更改为“完成”,它是启用的。 这是我的代码 这是我的搜索栏视图,请参见“取消”按钮。它未启用 - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { //[newSearchBar setS

我的应用程序有一个搜索栏,用于从由sqlite DB填充的表视图中搜索记录。 我的问题是,当视图打开时,“取消”按钮没有启用,而且我不能触摸它,就像一个图像一样。它在那里,但没有任何操作。 当我们点击搜索栏上的文本时,取消按钮将被更改为“完成”,它是启用的。 这是我的代码

这是我的搜索栏视图,请参见“取消”按钮。它未启用

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    //[newSearchBar setShowsCancelButton:YES animated:YES];


    newSearchBar.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;

    NSLog(@"search begin edit") ;

    //searchString = searchBar.text;

    //NSLog(@"print did edit searchstring : %@", searchString) ;

    for(UIView *view in [searchBar subviews])       
    {

        //shareItemId =newSearchBar.text;

        if([view isKindOfClass:[NSClassFromString(@"UINavigationButton") class]]) {
            [(UIBarItem *)view setTitle:@"Done"];

        }
        }

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
    NSLog(@"searchBarTextDidEndEditing:");


    [searchBar resignFirstResponder];
    //[self dismissModalViewControllerAnimated:YES];
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    NSLog(@"searchBarSearchButtonClicked");


    searchString = searchBar.text;
    NSLog(@"search %@", searchBar.text);
    [newSearchBar setShowsCancelButton:NO animated:YES];

    [searchBar resignFirstResponder];
    //[self dismissModalViewControllerAnimated:YES];
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar

{  
    NSLog(@" searchBarCancelButtonClicked");


    [searchBar resignFirstResponder];

     shareItemName =newSearchBar.text;

    [self dismissModalViewControllerAnimated:YES];

}

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {

    NSLog(@"searchBarShouldBeginEditing");


    [newSearchBar setShowsCancelButton:YES animated:YES];
    return YES;
}

这些是我的代表

请检查我的密码并给我答案。我需要启用“取消”按钮时,视图加载,它的行动将返回到以前的看法

我需要这样


或者,我怎样才能在令人兴奋的取消按钮上添加另一个取消按钮。这样我就可以启用。请给我所有详细信息

我猜苹果制作UISearchBar的方式是,如果搜索文本字段为空或不是第一响应者,取消按钮将被禁用

这是有意义的,因为除了实际取消搜索外,您不应该将“取消”按钮用于其他目的。由于没有要取消的搜索,该按钮被禁用

如果您仍然希望在显示视图时按钮立即处于活动状态,您可以在
视图中调用它:
[mySearchBar becomeFirstResponder]

这将导致显示键盘,并启用按钮。 然后,如果用户点击cancel,您可以截取它返回到上一个视图。(我不确定苹果是否会喜欢这种行为)

示例代码:

-(void) viewWillAppear : (BOOL) animated
{
    [super viewWillAppear:animated];
    // Make keyboard pop and enable the "Cancel" button.
    [self.mySearchBar becomeFirstResponder];
}

您需要将UISearchDisplayController设置为活动状态,如下所示:

 [mySearchDisplayController setActive:YES animated:YES];
或者更简单地说:

 mySearchDisplayController.active = YES;

下面是我为始终启用“取消”按钮所做的操作,即使搜索字段不是第一响应者

每当我在搜索字段上调用
resignFirstResponder
时,我都会调用此方法

- (void)enableCancelButton {
    for (UIView *view in self.searchBar.subviews) {
        if ([view isKindOfClass:[UIButton class]]) {
            [(UIButton *)view setEnabled:YES];
        }
    }
}

这是可行的,但我不确定它是否会通过应用商店验证,所以使用它的风险自负。此外,这可能仅在“取消”按钮是您在搜索字段中使用的唯一按钮时才起作用。

从iOS 8开始,这可用于重新启用“取消”按钮:

private func enableButtonsInSubviews(view: UIView) {
    if let view = view as? UIButton {
        view.enabled = true
    }

    for subview in view.subviews {
        enableButtonsInSubviews(subview)
    }
}

方法
searchBarCancelButtonClicked
是否被调用?@7KV7-如果按钮被禁用,它怎么能被调用?我猜UISearchBar的行为是在搜索文本字段不是first responder时禁用cancel按钮。您可以按中所述手动强制启用它。它不起作用…我不知道为什么。我认为这是不可能的,我不希望在单击搜索栏标签文本之前先拔出键盘..因为谓词当点击搜索栏标签文本时,在表格中启用搜索功能。我只需要向上拉键盘。这绝对是可能的,因为我试过了,它成功了。但是如果你不想让键盘出现,除了制作自己的“搜索栏”,我看不到其他选择。只要一个文本字段,旁边有一个按钮,你们就都准备好了。这会不会产生和成为第一响应者一样的效果?意味着,键盘会弹出?不,我不这么认为-成为第一响应者是控制键盘的因素。为什么这不能通过应用商店验证,你使用的都是公共API。这项技术似乎不再有效,因为self.searchBar.subview没有任何UIButton。我刚刚在iOS 8.x上进行了尝试/测试。