【问题标题】:UISearch bar not calling searchBarTextDidBeginEditingUISearch 栏没有调用 searchBarTextDidBeginEditing
【发布时间】:2011-12-21 21:20:23
【问题描述】:

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

我尝试实现委托函数 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 永远不会被触发...

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

【问题讨论】:

  • 你能发布你的代码吗?
  • 我的 searchBar 有相反的行为。我得到了 searchBarTextDidBeginEditing 但没有得到 searchBarShouldBeginEditing... 也许 Apple 在最新的 SDK 中搞砸了一些东西?你用的是什么 SDK?
  • 对不起,我没有代码了......我认为我解决了它重新创建了整个项目(但仍然不知道第一个项目失败的原因。)

标签: ios uisearchbar uisearchbardelegate


【解决方案1】:

您是否设置了委托属性?

searchbar.delegate = self;

【讨论】:

  • 我通过界面生成器和代码(并且两者同时 XD)两种方式都做了无论如何我不认为这是问题,因为委托函数之一确实被调用(searchBarShouldBeginEditing)。顺便谢谢你的回答!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    self.searchController.searchBar.delegate = self;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多