6

我有一个带有uisearchbaruitable的简单视图控制器。我的问题是,当点击搜索栏时,我看到调用了委托函数searchBarShouldBeginEditing但没有调用 searchBarTextDidBeginEditing(并且因为没有打开键盘并且搜索不可编辑)

我尝试实现委托函数searchBarShouldBeginEditing 返回 YES,将搜索栏设置为第一响应者,但我无法调用searchBarTextDidBeginEditing ...

知道会发生什么吗?

一些代码:

控制器.h

@interface ViewController : UIViewController <UISearchBarDelegate>
{
   UISearchBar * searchbar;
}

@property (nonatomic, retain) IBOutlet UISearchBar* searchbar;

@end

控制器.m

@synthesize searchbar;

- (BOOL)respondsToSelector:(SEL)sel {
    NSLog(@"Queried about %@", NSStringFromSelector(sel));
    return [super respondsToSelector:sel];
}

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
    NSLog(@"searchBarShouldBeginEditing -Are we getting here??"); 
    return YES;  
}  
-(void) searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
    NSLog(@"searchBarTextDidBeginEditing -Are we getting here??");  
}

当然,我的班级有更多的代码(这肯定会以某种方式影响搜索栏),但如果有人在搜索栏遇到类似的问题,它会非常感谢它的响应;)

我尝试只用搜索栏制作简单的应用程序,显然它可以工作......

编辑:

稍微测试一下,我发现它与 uisearchbar 无关,因为我添加了一个 TextField 得到相同的结果(只是调用了 textFieldShouldStartEditing 委托函数)

应用程序在 UITabBar 控制器内具有所有视图控制器,但我认为这不会导致所有这些混乱......

编辑2:

非常奇怪的行为:将 IBAction 函数设置为 UITextfield 的 TouchDown 事件效果很好,但将 IBAction 函数设置为 EditingDidBegin 永远不会被触发......

为什么这个事件不能被调用??

4

3 回答 3

13

你设置了委托属性吗?

searchbar.delegate = self;
于 2011-11-04T10:15:16.570 回答
0

也许你在某个地方打电话[searchbar resignFirstResponder]。我的类似问题就是这种情况。

于 2016-03-15T13:50:35.487 回答
0

当我从独立的 UISearchBar 转换为集成到 UINavigationBar 中的 searchBar 时,我遇到了这个问题。

在转换我的代码时,我仍在分配 UISearchBar 并为此设置委托。我应该做的是配置作为 UISearchController 一部分的 searchBar,并设置它的委托,

self.searchController.searchBar.delegate = self;

一旦我这样做了,我的委托方法就开始触发了!

于 2018-12-30T14:37:23.047 回答