UISearchBar没有关注iPad拆分视图

时间:2013-05-06 00:05:41

标签: objective-c xcode ipad uisplitviewcontroller uisearchbar

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

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

使用

上的iPhone按钮激活搜索栏时
[self.searchBar becomeFirstResponder];

桌子一直向上滚动,搜索栏进入视图,键盘出现,我可以开始输入。细

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

你能给我一些线索在哪里看吗?我确保所有东西都连接在xib中......

干杯, 鲍勃

2 个答案:

答案 0 :(得分:1)

我找到了一个现在可以使用的解决方法,但有点奇怪的是只需在iPad上进行解决方法...... 在搜索栏上调用becomeFirstResponder之前,只需将tableView的边界的原点移动到0,0。在iPhone上,这会“自动”发生。

    CGRect newBounds = self.mainTableView.bounds;
    newBounds.origin.y = 0;
    self.mainTableView.bounds = newBounds;

答案 1 :(得分: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;
    });
}

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