【问题标题】:UISearchBar not responding when clicked点击时 UISearchBar 没有响应
【发布时间】:2012-06-12 06:42:32
【问题描述】:

我已经尝试找到解决方案好几个小时了,但可惜没有骰子... 我一直在尝试纯粹以编程方式实现 UISearchBar(没有 xib,没有界面构建器)。

这是我的 .h 标头:

@interface RLCASearchMasterViewController : UIViewController<UISearchBarDelegate>

@property (strong, nonatomic) RLCAGUIElements *gui;
@property (strong, nonatomic) RLCAUITableView *table;
@property (strong, nonatomic) UISearchBar *searchBar;

@end

和我的 .m 实现:

@synthesize searchBar;

- (void)loadView
{

[super loadView];

searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, searchBar.frame.size.height)];
searchBar.delegate = self;
[self.view addSubview:searchBar];  

}

我已经经历了不知道多少次,也不知道我做错了什么...... UISearchBar 以正确的大小和所有内容添加到视图中就好了,但是当单击/点击时,键盘不会出现。 但是,如果我唤起以下内容:

[searchBar becomeFirstResponder];

键盘确实显示,所以它可能不是委托,而是实际检测它是否被点击...我不希望它在加载时进行编辑,并且只能根据请求...

请帮忙。谢谢! :)

真诚地, 彼得。

【问题讨论】:

  • 它是否在任何其他视图之下?他们可能会阻止它的接触。
  • 我不认为它在任何视图下 - 我已经从所有视图中删除了所有 [UIColor clearColor] 背景以进行检查,似乎没有任何东西覆盖它......

标签: iphone objective-c uisearchbar uisearchbardelegate


【解决方案1】:

尝试定义它的委托方法并将成为第一响应者的方法放在 searchBarShouldBeginEditing 方法中。如果它仍然不起作用,请确保此视图之上是否没有任何其他视图。这样,它将覆盖触摸。

【讨论】:

    【解决方案2】:

    好的,我开始工作了。

    它有效,但我不知道为什么。如果有人有任何见解,我将非常感激......

    所以:

    我换了:

    searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(self.view.frame.origin.x,         self.view.frame.origin.y, self.view.frame.size.width, searchBar.frame.size.height)];
    searchBar.delegate = self;
    [self.view addSubview:searchBar]; 
    

    与:

    searchBar = [[UISearchBar alloc] init];
    searchBar.delegate = self;
    [searchBar sizeToFit];
    [self.view addSubview:searchBar];
    

    ...啊,薇奥拉! ;)

    感谢所有答案,如前所述,希望能解释一下为什么会这样以及它做了什么。

    一切顺利, 彼得。

    【讨论】:

    • 我刚刚遇到了这个问题,我相信我知道发生了什么。此问题是由于 UISearchBar 不可选择所致。这可能是因为它被另一个视图覆盖,或者父视图控制器不够大。我的情况恰好是后者。我的父视图只有 100 像素大,即使我可以看到 UISearchBar,它也不会与任何类型的触摸交互。将父视图控制器更改为更大的尺寸解决了这个问题。
    【解决方案3】:
    searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(self.view.frame.origin.x,         self.view.frame.origin.y, self.view.frame.size.width, searchBar.frame.size.
    

    您不应访问 searchBars 框架以在其自己的 init 方法中使用。我想,因为那一刻它还没有被初始化,所以它将为 0,因此给你一个没有高度的矩形,或者可能是一个 NSZeroRect,因为 makeRect 完全失败了

    我认为这就是问题所在。

    【讨论】:

    • +1 供您发表评论。确实还没有设置大小,所以使用 searchBar.frame 最终会一无所获。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多