这是我在Stackoverflow上的第一个问题。我在编写通用iOS应用程序时广泛使用了SO。
我遇到了一个关于UISearchBar的问题: 我有一个通用的应用程序,有一个tableview和一个搜索栏。在iPhone上,tableview是主视图控制器,在iPad上,它是splitViewController的masterViewController。 这两个设备有不同的XIB,但它们共享相同的实现代码。 搜索栏工作正常,除非我第一次向下滚动桌面视图。
使用
上的iPhone按钮激活搜索栏时[self.searchBar becomeFirstResponder];
桌子一直向上滚动,搜索栏进入视图,键盘出现,我可以开始输入。细
虽然在iPad上,tableview是UISplitView的一部分,但是当我调用yesFirstResponder时,tableview不会滚动,搜索栏没有进入视图,我无法控制搜索栏(我也无法点击取消按钮,因为我没有看到它)。 SearchDisplayController已激活,因为tableview变暗并且导航栏移出视图。
你能给我一些线索在哪里看吗?我确保所有东西都连接在xib中......
干杯, 鲍勃
答案 0 :(得分:1)
我找到了一个现在可以使用的解决方法,但有点奇怪的是只需在iPad上进行解决方法...... 在搜索栏上调用becomeFirstResponder之前,只需将tableView的边界的原点移动到0,0。在iPhone上,这会“自动”发生。
CGRect newBounds = self.mainTableView.bounds;
newBounds.origin.y = 0;
self.mainTableView.bounds = newBounds;
答案 1 :(得分:0)
在方法
中插入字符串- (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;
});
}
它以纵向和横向模式工作。