UISearch bar未调用searchBarTextDidBeginEditing方法

6
我有一个简单的视图控制器,其中包含一个uisearchbar和一个uitable。 我的问题是,在搜索栏被点击时,我看到调用了委托函数searchBarShouldBeginEditing,但没有调用searchBarTextDidBeginEditing(因此键盘不会打开并且搜索不可编辑)。
我尝试实现委托函数searchBarShouldBeginEditing返回YES,将搜索栏设置为第一响应者,但是我无法使searchBarTextDidBeginEditing被调用...
有什么想法??
一些代码: controller.h
@interface ViewController : UIViewController <UISearchBarDelegate>
{
   UISearchBar * searchbar;
}

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

@end

controller.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 cotroller中,但我不认为这会导致所有这些麻烦......

编辑2:

非常奇怪的行为:将IBAction函数设置为UITextfield的TouchDown事件可以完美地工作,但将IBAction函数设置为EditingDidBegin永远不会被触发......

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


你能发布你的代码吗? - Raptor
我的 searchBar 出现了相反的行为。我收到了 searchBarTextDidBeginEditing,但没有收到 searchBarShouldBeginEditing... 也许苹果在最新的 SDK 中出了什么问题?你使用的是什么版本的 SDK? - Mark
对不起,我已经没有那段代码了... 我想我解决了它,重新创建整个项目(但仍然不知道第一个项目出了什么问题)。 - M Penades
3个回答

13

你设置了委托属性吗?

searchbar.delegate = self;

1
我已经通过界面生成器和代码两种方式实现了(有时还同时使用两种方式XD)。不过无论如何,我不认为这是问题所在,因为其中一个委托函数确实被调用了(searchBarShouldBeginEditing)。顺便说一下,感谢你的回答! - M Penades

1
也许你在某处调用了 [searchbar resignFirstResponder]。这是我类似问题的情况。

0
我在将独立的UISearchBar转换为集成到UINavigationBar中的searchBar时遇到了这个问题。
在转换我的代码时,我仍然分配了UISearchBar并设置了该代理。我应该做的是配置作为UISearchController一部分的searchBar,并设置其代理。
self.searchController.searchBar.delegate = self;

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接