2014-12-19 5 views
11

Wie können Benutzer kopieren und aus einem Xamarin.Forms-Label einfügen?Wie können Sie Benutzern das Kopieren und Einfügen aus einem Xamarin.Forms-Label ermöglichen?

Klicken Sie auf den Text auf einer beliebigen Plattform die Standardeinstellungen erlauben keine Hervorhebung und damit Kopieren und Einfügen.

Jede Hilfe wäre willkommen.

+0

Ich möchte auch Benutzern ermöglichen, von einem Xamarin.Forms-Label kopieren und einfügen. Ich habe in Xamarin keinen Zwischenablage-Manager gefunden. Formulare wie Android. Bitte führen Sie, wenn es ein Tutorial dafür gibt. –

+1

Keine Hilfe bis jetzt. Ist das nicht mit Xamarin.Forms möglich? –

+1

Ich habe es nie aufgespürt, und gab auf, da es für uns keine super wichtige Funktion war. – Jhayes2118

Antwort

6

Was könnten Sie tun, wickeln ist Ihr Etikett in einer Geste Erkenner:

<Label Text="Test"> 
    <Label.GestureRecognizers> 
     <TapGestureRecognizer 
      Tapped="YourFunctionToHandleMadTaps" 
      NumberOfTapsRequired="1" 
     /> 
    </Label.GestureRecognizers> 
</Label> 

Dies wird Ihre Funktion auslösen und in dieser Funktion können Sie in die Zwischenablage erhalten und kopieren und einfügen. Ich habe jedoch keine einfache Möglichkeit gefunden, auf die Zwischenablage in Xamarin.Forms zuzugreifen, so dass Sie den Abhängigkeitsdienst verwenden müssen.

Xamarin.Forms Dependency service documentation

Hier ist, wie ich meine Daten in der Zwischenablage Zugriff haben. Bitte beachten Sie, dass ich nur in meinem Projekt benötigten Daten aus der Zwischenablage in nab sodass dieser Code Sie zeigt, wie die Daten in der Zwischenablage zuzugreifen:

  1. eine Schnittstelle in Ihnen XF Projekt anlegen zB:

    public interface IClipBoard 
        { 
         String GetTextFromClipBoard(); 
        } 
    
  2. Implementieren Sie die Schnittstelle in Ihrem Mobilprojekte:

    Android: 
        public string GetTextFromClipBoard() 
        { 
         var clipboardmanager = (ClipboardManager)Forms.Context.GetSystemService (Context.ClipboardService); 
         var item = clipboardmanager.PrimaryClip.GetItemAt(0); 
         var text = item.Text; 
         return text; 
        } 
    
    iOs: 
        public string GetTextFromClipBoard() 
        { 
         var pb = UIPasteboard.General.GetValue ("public.utf8-plain-text"); 
         return pb.ToString(); 
        } 
    

Sie nicht den Assem hinzufügen vergessen Bly Bits an der Spitze:

iOs: [assembly: Dependency (typeof (ClipBoard_iOs))] 
    Android: [assembly: Dependency (typeof (ClipBoard_Droid))] 
  1. Rufen Sie den Abhängigkeitsdienst von Ihnen XF Funktion

    public void YourFunctionToHandleMadTaps(Object sender, EventArgs ea) 
        { 
         var clipboardText = DependencyService.Get<IClipBoard>().GetTextFromClipBoard(); 
    
         YourFunctionToHandleMadTaps.Text = clipboardText; 
        } 
    
0

Da I_Khanage nur eine halbe Lösung zur Verfügung gestellt, ich wird die vollständige Lösung veröffentlichen.

IClipboardService sollte für alle Targeting-Plattformen, in meinem Fall implementiert werden, ist es Android und iOS:

public interface IClipboardService 
{ 
    string GetTextFromClipboard(); 
    void SendTextToClipboard(string text); 
} 

// iOS 
public class ClipboardService : IClipboardService 
{ 
    public string GetTextFromClipboard() => UIPasteboard.General.String; 
    public void SendTextToClipboard(string text) => UIPasteboard.General.String = text; 
} 

// Android 
public class ClipboardService : IClipboardService 
{ 
    public string GetTextFromClipboard() 
    { 
     var clipboardmanager = (ClipboardManager)Forms.Context.GetSystemService(Context.ClipboardService); 
     var item = clipboardmanager.PrimaryClip.GetItemAt(0); 
     var text = item.Text; 
     return text; 
    } 

    public void SendTextToClipboard(string text) 
    { 
     // Get the Clipboard Manager 
     var clipboardManager = (ClipboardManager)Forms.Context.GetSystemService(Context.ClipboardService); 

     // Create a new Clip 
     var clip = ClipData.NewPlainText("YOUR_TITLE_HERE", text); 

     // Copy the text 
     clipboardManager.PrimaryClip = clip; 
    } 
} 

Der Code ist auf github zur Verfügung.

Fügen Sie nun einfach eine GestureRecognizer hinzu, um das Tap-Ereignis auszulösen.