2017-08-18 5 views
1

Wir internationalisieren eine mobile App, die mein Team entwickelt, und mir ist aufgefallen, dass der "Cancel" -Button in der SearchBar nicht übersetzt (alles andere ist gut übersetzt) ​​- es sagt immer "Cancel" in Englisch, egal welche Sprache ich ändere der iPad-Simulator zu. Wenn ich den Text selbst einstellen kann, kann ich sicherstellen, dass er richtig internationalisiert ist. So ...Xamarin.Forms (iOS) - Wie ändert man den Text der SearchBar "Abbrechen" -Schaltfläche?

Wie ändere ich die Schaltfläche "Abbrechen" auf einem Xamarin.Forms SearchBar? Ich habe einen benutzerdefinierten Renderer ausprobiert, kann aber nicht auf die Unteransicht "Abbrechen" abzielen. This answer scheint eine großartige Arbeit zu leisten, um zu erklären, wie man das in Objective C macht, aber ich habe Probleme beim Übersetzen in C# innerhalb des Xamarin.Forms-Frameworks.

Antwort

3

Erstellen Sie eine neue custom renderer für iOS. So etwas wie CustomSearchBarRenderer und Unterklasse der ursprünglichen SearchBarRenderer des Xamarin

public class CustomSearchBarRenderer : SearchBarRenderer { } 

Ich würde wahrscheinlich versuchen OnElementChanged Methode außer Kraft zu setzen und den benutzerdefinierten Titelsatz, nachdem die Basisklasse die ganze Arbeit getan hat. Wie folgt aus:

protected override void OnElementChanged(ElementChangedEventArgs<SearchBar> e) 
{ 
    base.OnElementChanged(e); 

    var cancelButton = Control.FindDescendantView<UIButton>(); 
    cancelButton.Title = "Whatever"; 
} 

Edit: Bitte beachten Sie, dass die cancelButton könnte irgendwann neu erstellt, so dass Sie den Titel an einem anderen Punkt gesetzt haben könnten, um auch. Dies sollte jedoch ein guter Ausgangspunkt sein.

Sie können auch die aktuelle SearchBarRenderer-Implementierung here ansehen.

+1

So ziemlich das genaue Setup, das ich habe - aber Ihr '.FindDescendView ... 'Vorschlag brachte mich dazu, die verfügbaren Methoden auf dem Control zu überprüfen, und ich fand' .Descendants'! Also werde ich versuchen 'UIButton cancelButton = Control.Descendants(). OfType () .FirstOrDefault();' – jbyrd

+0

So konnte ich den Text ändern, indem Sie Code in der 'OnElementPropertyChanged()' Methode, mit ' UIButton cancelButton = Control.Descendants(). OfType () .FirstOrDefault(); 'und dann' cancelButton.SetTitle ("Benutzerdefiniert", UIControlState.Normal); '* ABER * - Es gibt einen Fehler, wo nach dem ersten Mal Abbrechen-Schaltfläche erscheint, jedes Mal danach überlappender Text, wobei der erste Teil des benutzerdefinierten Textes ebenfalls rechts neben (als Teil von) der "x" -Schaltfläche erscheint, - so: https://snag.gy/ SiMsu5.jpg – jbyrd

Verwandte Themen