Xamarin.Forms mette a disposizione due controlli per la scrittura di testo: Entry ed Editor. Entry è paragonabile alla classica TextBox di altre piattaforme, Editor consente la scrittura multilinea.
Tra i due, Entry è quello (leggermente) più personalizzabile. In realtà soffre di varie mancanze, tra cui ad esempio non è disponibile una modalità read-only, ma parliamo dell'Editor che, a sua volta, soffre di mancanza di personalizzazione.
Come sapete, i controlli di Xamarin.Forms dietro le scene vanno a richiamare i corrispondenti controlli nativi, ciò significa che ne assumono anche l'aspetto relativo alla piattaforma.
Su iOS, il controllo Editor non ha bordo e non c'è (almeno ad oggi) alcuna proprietà che consenta di assegnarlo. Questo è abbastanza fastidioso, perché, di fatto, il controllo è invisibile fino a che non prende il focus.
Per risolvere questo problema bisogna creare un renderer, che vada a modificare l'aspetto direttamente del controllo nativo iOS.
Per farlo, si aggiunge una classe al progetto iOS col seguente codice:
using MobileInspect.iOS;
using UIKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(Editor), typeof(CustomEditorRenderer))]
namespace MobileInspect.iOS
{
public class CustomEditorRenderer : EditorRenderer
{
protected override void OnElementChanged(
ElementChangedEventArgs<Editor> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.Layer.BorderColor =
UIColor.DarkGray.CGColor;
Control.Layer.BorderWidth = 0.5f;
Control.Layer.CornerRadius = 3f;
}
}
}
}
Non dovete fare nulla a questo punto, se non scegliere un colore diverso, perché l'attributo ExportRenderer punta al controllo nativo.
Alessandro