1

这是我在 Stackoverflow 上的第一个问题。在编写通用 iOS 应用程序时,我已经广泛使用了 SO。

我遇到了一个关于 UISearchBar 的问题:我有一个通用应用程序,带有一个表格视图和一个搜索栏。在 iPhone 上,tableview 是主视图控制器,在 iPad 上,它是 splitViewController 的 masterViewController。2 个设备有不同的 XIB,但它们共享相同的实现代码。搜索栏工作正常,除非我第一次向下滚动表格视图。

当我使用 iPhone 上的按钮激活搜索栏时

[self.searchBar becomeFirstResponder];

表格一直向上滚动,搜索栏出现,键盘出现,我可以开始打字了。美好的。

但是在 iPad 上,tableview 是 UISplitView 的一部分,当我调用 becomeFirstResponder 时,tableview 不会滚动,搜索栏不会出现,我无法控制搜索栏(我也无法单击取消按钮因为我没看到)。SearchDisplayController 被激活,因为 tableview 变暗并且导航栏移出视图。

你能告诉我在哪里看吗?我已经确保所有东西都连接到 xib ...

干杯,鲍勃

4

2 回答 2

1

我找到了一个暂时有效的解决方法,但有点奇怪的是,只有在 iPad 上才需要该解决方法......只需将 tableView 边界的原点移动到 0,0,然后在搜索栏上调用 becomeFirstResponder 即可。在 iPhone 上,这是“自动”发生的。

    CGRect newBounds = self.mainTableView.bounds;
    newBounds.origin.y = 0;
    self.mainTableView.bounds = newBounds;
于 2013-05-08T10:07:53.117 回答
0

我从http://blog.patrickcrosby.com/2010/04/27/iphone-ipad-uisearchbar-uisearchdisplaycontroller-asynchronous-example.html下载了示例

在方法中插入字符串

- (void)mockSearch:(NSTimer*)timer
...

[self.searchDisplayController.searchBar becomeFirstResponder]; 

有用。希望我的帖子对你有所帮助。

在 TC 评论后添加:在 DetailViewConroller 我声明了协议:

@protocol SearchBarController <NSObject>
- (void) setSearchString: (NSString*) aString;
@end

并将 UIButton 与处理程序一起放置:

- (IBAction) pressSomeButton: (id) sender
{
    [_myPopoverController presentPopoverFromRect: CGRectMake(0, 0, 1, 1)
                                          inView: self.view
                        permittedArrowDirections: UIPopoverArrowDirectionUp
                                        animated: YES];

    [self.searchDelegate setSearchString: @"123"];
}

在 GenericViewController 接口中添加了 SearchBarController 协议。

协议实现方法:

- (void) setSearchString: (NSString*) aString
{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.searchDisplayController.searchBar becomeFirstResponder];
        self.searchDisplayController.searchBar.text = aString;
    });
}

它以纵向和横向模式工作文件。

于 2013-05-07T12:43:03.580 回答