在UISearchBar上自动设置enableReturnKey

时间:2010-05-20 07:53:19

标签: iphone uisearchbar

我正在为iphone OS 3.1.3写作。我想从我的UISearchBar键盘中的搜索按钮一直启用搜索按钮。如果这是任何旧的UITextField(不是搜索栏),则属性将是enableReturnKeyAutomatically。

我尝试使用http://discussions.apple.com/thread.jspa?messageID=8457910

中给出的示例进行设置

表明:

UITextField *searchTextField ; 
searchTextField = [[searchBar subviews]objectAtIndex:0];
searchTextField.enablesReturnKeyAutomatically = NO ;

应该有效。

不幸的是它崩溃了:

2010-05-20 08:36:18.284 ARemote[5929:207] *** -[UISearchBarBackground setEnablesReturnKeyAutomatically:]: unrecognized selector sent to instance 0x3b31980
2010-05-20 08:36:18.284 ARemote[5929:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UISearchBarBackground setEnablesReturnKeyAutomatically:]: unrecognized selector sent to instance 0x3b31980'

我也试过

((UITextField *)[(NSArray *)[searchBar subviews] objectAtIndex:0]).enablesReturnKeyAutomatically = NO;</code>

其中给出了类似的结果。

有什么想法吗?

干杯 埃里克

2 个答案:

答案 0 :(得分:7)

您正在访问UISearchBar的文档化视图层次结构。这可能会导致拒绝,但您的应用程序的行为将在固件升级时未指定。

这是一个例子。发布该回复后,UITextField仍然是搜索栏的第一个子视图。现在第一个子视图变成了UISearchBarBackground。

最小的变化是迭代整个视图层次结构并找到实际的UITextField。

for (id subview in searchBar.subviews) {
   if ([subview respondsToSelector:@selector(setEnablesReturnKeyAutomatically:)]) {
      [subview setEnablesReturnKeyAutomatically:NO];
      break;
   }
}

但是为了向前兼容,最好使用UITextField而不是UISearchBar,或者不要求始终启用搜索按钮(例如使用“取消”按钮)。

答案 1 :(得分:1)

实际上你可以设置searchBar.enablesReturnKeyAutomatically = NO;