0

我正在为 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>

这给出了类似的结果。

有任何想法吗?

干杯埃里克

4

2 回答 2

7

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

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

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

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

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

于 2010-05-20T08:06:35.857 回答
1

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

于 2014-12-10T10:04:25.907 回答