我想使用Xamarin.Forms渲染器構建一個wysiwyg編輯器作爲自定義組件。我發現了一些解決方案,這是一個Xamarin.iOS項目,它可以滿足我的需求: https://github.com/XAM-Consulting/TEditor。 我後面提到的例子,併爲Android實現Wysiwyg渲染器,但我有iOS渲染器的問題。 這是我的ViewRenderer<WysiwygEditor, UIView>
覆蓋方法:Xamarin.Forms Wysiwyg:將項目從Xamarion.iOS移動到Xamarin.Forms使用自定義渲染器
protected override void OnElementChanged(ElementChangedEventArgs<WysiwygEditor> e)
{
base.OnElementChanged(e);
if (Control == null)
{
_view = new UIView();
_editorWebView = new UIWebView();
_view.Add(_editorWebView);
var interpretter = new JavaScriptEnterpretter(_editorWebView);
_jsApi = new RichEditorApi(interpretter);
_editorWebView.Delegate = new WysiwygWebViewClient(_jsApi, Element.Html);
_editorWebView.AutoresizingMask = UIViewAutoresizing.FlexibleWidth
| UIViewAutoresizing.FlexibleHeight
| UIViewAutoresizing.FlexibleTopMargin
| UIViewAutoresizing.FlexibleBottomMargin;
_editorWebView.KeyboardDisplayRequiresUserAction = false;
_editorWebView.ScalesPageToFit = true;
_editorWebView.BackgroundColor = UIColor.White;
_editorWebView.ScrollView.Bounces = false;
_keyboardDidFrameToken = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.DidChangeFrameNotification, KeyboardDidFrame);
_keyboardWillShowToken = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillShowNotification, KeyboardWillShowOrHide);
_keyboardWillHideToken = NSNotificationCenter.DefaultCenter.AddObserver(UIKeyboard.WillHideNotification, KeyboardWillShowOrHide);
BuildToolbar(Element.Toolbars);
interpretter.Init();
_jsApi.SetPlatformAsIOS();
SetNativeControl(_view);
}
if (e.OldElement != null)
{
e.OldElement.Cleanup();
}
if (e.NewElement != null)
{
e.NewElement.Initialize(_jsApi);
SetHtml("some html");
}
}
WysiwygEditor是我的類繼承Xamarin.Forms.View。 問題是,JavaScript調用不起作用(如_editorWebView.EvaluateJavascript("document.execCommand('bold', false, null)")
)。其裝入_editorWebView
包含contenteditable=true
標籤屬性
所以HTML,我的問題是:
- 如何TEditorViewController從例如移動到我的項目正確的ViewRenderer?
- 在ViewRenderer中名爲ViewController的屬性的目的是什麼?我是否需要重寫它?
您是否已將[TEditor](https://www.nuget.org/packages/TEditor/)NuGet軟件包安裝到您的共享,iOS和Android項目中?可能比試圖將所有文件複製到自己更容易。 – hvaughan3
不,我不想安裝這個軟件包,因爲我需要做很多自定義設置,這就是爲什麼最好從TEdior中獲取想法並在我的項目 – Alexander