In meiner Anwendung verwende ich die Suchfunktion mit der Standardeinstellung IOS Suchleiste. Wenn ich eine Zeichenfolge für die Suche platziere, funktioniert sie einwandfrei, aber nach der ersten Suche muss ich die gesamte Datenquelle (ursprünglichen Inhalt) anzeigen. Meine Funktionalität Ist die Suchzeichenfolge leer, wird die gesamte Datenquelle angezeigt. Mein Problem ist, wenn ich die Suchzeichenfolge in der Standardsuchleiste leer mache, wird die Suchschaltfläche automatisch ausgeblendet. Ich muss die Suchschaltfläche aktivieren, auch wenn die Zeichenfolge leer ist. Bitte führen Sie mich aus, um dieses Problem zu beheben.
Vielen Dank.
Bitte schreiben Sie den folgenden Code für Sie hilfreich :) Diese Code-Anzeige Schaltfläche "Suchen" wenn Sie eine leere Zeichenfolge haben.
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
[self.searchBar setShowsCancelButton:YES animated:YES];
self.tblView.allowsSelection = NO;
self.tblView.scrollEnabled = NO;
UITextField *searchBarTextField = nil;
for (UIView *subview in self.searchBar.subviews)
{
if ([subview isKindOfClass:[UITextField class]])
{
searchBarTextField = (UITextField *)subview;
break;
}
}
searchBarTextField.enablesReturnKeyAutomatically = NO;
}
Probieren Sie es aus :) Danke :)
Eigentlich können Sie einfach searchBar.enablesReturnKeyAutomatically = NO;
Tested auf iOS 7+ einstellen
Verwenden Sie den folgenden Code, um den Return-Schlüssel ohne Text zu aktivieren
UITextField *searchField = nil;
for (UIView *subview in searchBar.subviews) {
if ([subview isKindOfClass:[UITextField class]]) {
searchField = (UITextField *)subview;
break;
}
}
if (searchField) {
searchField.enablesReturnKeyAutomatically = NO;
}
Swift 3/iOS 10
for view1 in searchBar.subviews {
for view2 in view1.subviews {
if let searchBarTextField = view2 as? UITextField {
searchBarTextField.enablesReturnKeyAutomatically = false
break
}
}
}
searchBar.enablesReturnKeyAutomatically = NO;
Es ist fast das gleiche wie die akzeptierte Antwort, aber wenn Sie mit iOS 7 arbeiten, benötigen Sie aufgrund einiger Änderungen in der Suchleiste eine zusätzliche for-Schleife
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
[self.searchBar setShowsCancelButton:YES animated:YES];
UITextField *searchBarTextField = nil;
for (UIView *mainview in self.searchBar.subviews)
{
for (UIView *subview in mainview.subviews) {
if ([subview isKindOfClass:[UITextField class]])
{
searchBarTextField = (UITextField *)subview;
break;
}
}
}
searchBarTextField.enablesReturnKeyAutomatically = NO;
}
Verwenden Sie dies, es funktioniert für iOS 6 und 7:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)search
{
UITextField *searchBarTextField = nil;
for (UIView *mainview in search.subviews) {
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
if ([mainview isKindOfClass:[UITextField class]]) {
searchBarTextField = (UITextField *)mainview;
break;
}
}
for (UIView *subview in mainview.subviews) {
if ([subview isKindOfClass:[UITextField class]]) {
searchBarTextField = (UITextField *)subview;
break;
}
}
}
searchBarTextField.enablesReturnKeyAutomatically = NO;
}
Erstellen Sie ein benutzerdefiniertes view
& auf diesem view
fügen Sie ein button
hinzu, um die Tastatur zu entfernen. Fügen Sie diese Ansicht hinzu, wenn - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
delegate
Methode von UISearchBar
. Klicken Sie auf diese Schaltfläche, um die Tastatur sowie das view
, das Sie für button
erstellt haben, neu zu bestimmen. Wenn Sie nach diesem Knopf suchen möchten, klicken Sie auf, dann können Sie es auch tun. Bitte sehen Sie das Bild für weitere Erläuterungen.
Ist vielleicht ein Apple-Fehler? Seit der Einstellung der .xib-Datei funktioniert der automatische Aktivierungsschlüssel nicht wie erwartet.
Fügen Sie einfach den folgenden Code hinzu:
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
searchBar.enablesReturnKeyAutomatically = NO;
return YES;
}
Wenn Sie nach einer etwas eleganteren Lösung suchen, können Sie das Textfeld in der Suchleiste mithilfe von Rekursion finden, wie unten gezeigt. Dies sollte für iOS 6, 7 oder andere zukünftige Betriebssysteme funktionieren, die keine Abschreibungen von Apple zulassen.
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
UITextField* textField = [self findTextFieldInView:searchBar];
if (textField) {
textField.enablesReturnKeyAutomatically = NO;
}
}
-(UITextField*)findTextFieldInView:(UIView*)view {
if ([view isKindOfClass:[UITextField class]]) {
return (UITextField*)view;
}
for (UIView* subview in view.subviews) {
UITextField* textField = [self findTextFieldInView:subview];
if (textField) {
return textField;
}
}
return nil;
}
Einfache Swift-Version:
if let searchTextField:UITextField = searchBar.subviews[0].subviews[2] as? UITextField {
searchTextField.enablesReturnKeyAutomatically = false
}
Hier ist eine Lösung mit Swift. Fügen Sie es einfach in Ihre viewDidLoad-Funktion ein und vergewissern Sie sich, dass Sie ein IBOutlet Ihrer searchBar im Code haben. (In meinem Beispiel unten ist die inputSearchBar-Variable das IBOutlet)
// making the search button available when the search text is empty
var searchBarTextField : UITextField!
for view1 in inputSearchBar.subviews {
for view2 in view1.subviews {
if view2.isKindOfClass(UITextField) {
searchBarTextField = view2 as UITextField
searchBarTextField.enablesReturnKeyAutomatically = false
break
}
}
}