C# 如何动态更改HybridWebView(iOS)Uri?
我的应用程序中有一个C# 如何动态更改HybridWebView(iOS)Uri?,c#,xamarin,xamarin.forms,xamarin.ios,wkwebview,C#,Xamarin,Xamarin.forms,Xamarin.ios,Wkwebview,我的应用程序中有一个HybridWebView,我需要动态更改uri(当用户单击某个菜单时,uri会更改),但它根本不会更改。。。我使用WebView,它工作得很好,但是当我使用HybridWebView时,Uri没有改变 这个ContentView是我的HybridWebView,它位于绝对布局中 <ContentView AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.Layo
HybridWebView
,我需要动态更改uri(当用户单击某个菜单时,uri会更改),但它根本不会更改。。。我使用WebView
,它工作得很好,但是当我使用HybridWebView
时,Uri没有改变
这个ContentView是我的HybridWebView,它位于绝对布局中
<ContentView AbsoluteLayout.LayoutFlags="All"
AbsoluteLayout.LayoutBounds="0,0,1,1"
x:Name="contentView">
<local1:HybridWebView x:Name="hybridWebView"/></ContentView>
这是我的HybridWebView类:
public class HybridWebView : WebView
{
Action<string> action;
public static readonly BindableProperty UriProperty = BindableProperty.Create(
propertyName: nameof(Uri),
returnType: typeof(string),
declaringType: typeof(HybridWebView),
defaultValue: default(string));
public string Uri
{
get { return (string)GetValue(UriProperty); }
set { SetValue(UriProperty, value); }
}
public void RegisterAction(Action<string> callback)
{
action = callback;
}
public void Cleanup()
{
action = null;
}
public void InvokeAction(string data)
{
if (action == null || data == null)
{
return;
}
action.Invoke(data);
}
public HybridWebView()
{
}
}
公共类HybridWebView:WebView
{
行动;
公共静态只读BindableProperty UriProperty=BindableProperty.Create(
propertyName:nameof(Uri),
returnType:typeof(字符串),
declaringType:typeof(HybridWebView),
defaultValue:默认值(字符串));
公共字符串Uri
{
获取{return(string)GetValue(UriProperty);}
set{SetValue(UriProperty,value);}
}
公共无效注册表操作(操作回调)
{
动作=回调;
}
公共空间清理()
{
action=null;
}
公共void InvokeAction(字符串数据)
{
if(action==null | | data==null)
{
返回;
}
调用(数据);
}
公共HybridWebView()
{
}
}
我刚才是这样解决的:
受保护的覆盖无效OnElementPropertyChanged(对象发送方,PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(发送方,e)
我必须添加OnElementPropertyChanged以通过CustomRenderer动态更改url嗨,你能分享代码如何更改
HybridWebView
的url吗?此外,你还可以分享HybridWebView
的代码,最好知道原因。嗨,我在那里添加了代码…谢谢!太好了!很高兴你已经解决了这个问题。记得在可能的时候标出答案。
public class HybridWebView : WebView
{
Action<string> action;
public static readonly BindableProperty UriProperty = BindableProperty.Create(
propertyName: nameof(Uri),
returnType: typeof(string),
declaringType: typeof(HybridWebView),
defaultValue: default(string));
public string Uri
{
get { return (string)GetValue(UriProperty); }
set { SetValue(UriProperty, value); }
}
public void RegisterAction(Action<string> callback)
{
action = callback;
}
public void Cleanup()
{
action = null;
}
public void InvokeAction(string data)
{
if (action == null || data == null)
{
return;
}
action.Invoke(data);
}
public HybridWebView()
{
}
}
if (Control.Url != null)
{
var idn = new System.Globalization.IdnMapping();
var dotnetUri = new System.Uri(Element.Uri);
_url = ((HybridWebView)Element).Uri;
NSUrl nsUrl = new NSUrl(dotnetUri.Scheme, idn.GetAscii(dotnetUri.DnsSafeHost), dotnetUri.PathAndQuery);
Control.LoadRequest(new NSUrlRequest(nsUrl));
}
}