2017-08-18 7 views
1

私のチームが開発しているモバイルアプリを国際化していますが、SearchBarの「キャンセル」ボタンが翻訳されていないことに気付きました(他のすべてはうまく翻訳しています)。 iPadシミュレーターに。テキストを自分で設定できる場合は、適切に国際化されていることを確認できます。だから...Xamarin.Forms(iOS) - 検索バーの[キャンセル]ボタンのテキストを変更するにはどうすればよいですか?

Xamarin.Forms SearchBarの「キャンセル」ボタンのテキストを変更するにはどうすればよいですか?カスタムレンダラーを試しましたが、キャンセルボタンのサブビューを対象とするのが難しいです。 This answerはObjective Cでそれを行う方法を説明する素晴らしい仕事をしているようですが、Xamarin.Formsフレームワーク内でC#に変換するのに問題があります。

答えて

3

iOS向けに新しいcustom rendererを作成します。 CustomSearchBarRendererような何かとサブクラスXamarinのオリジナルSearchBarRenderer

public class CustomSearchBarRenderer : SearchBarRenderer { } 

私はおそらくOnElementChangedメソッドをオーバーライドして、基本クラスは、すべての仕事をした後にカスタムタイトルを設定しようと思います。このように:

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

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

編集:あなたはあまりにも他のいくつかのポイントでタイトルを設定する必要がある場合がありますので、がcancelButtonは、いくつかの時点で再作成される可能性がありますのでご注意ください。しかし、これは良い出発点であるはずです。

また、SearchBarRendererの現在の実装hereを見ることもできます。

+1

あなたの '.FindDescendantView ...'提案は、私がコントロール上で利用可能なメソッドを再調査して、 '.Descendants'を見つけました! OfType ().FirstOrDefault(); ' – jbyrd

+0

これで、' OnElementPropertyChanged() 'メソッドにコードを組み込むことでテキストを変更することができました。' OnElementPropertyChanged() 'メソッドは、' UButton cancelButton = Control.Descendants UButtonのcancelButton = Control.Descendants()。OfType ().FirstOrDefault(); '次にcancelButton.SetTitle(" Custom "、UIControlState.Normal);' * BUT *キャンセルボタンが表示され、それ以降は、カスタムテキストの最初の部分が "x"ボタンの(一部として)右側に表示されるオーバーラップテキストが表示されます。 - https://snag.gy/ SiMsu5.jpg – jbyrd

関連する問題