拨打电话ios xamarin

时间:2014-08-01 14:05:47

标签: c# ios uitableview xamarin.ios xamarin

我目前在表格视图中有一个按钮。我有自定义单元格类和更新单元格方法。

public void UpdateCell (string subtitle2)
{               
    call.SetTitle(subtitle2, UIControlState.Normal);
    call.TouchUpInside += (object sender, EventArgs e) => {
        UIApplication.SharedApplication.OpenUrl(new NSUrl("tel:" + subtitle2));
    };          
}

然而,当我运行这段代码时,我收到一个错误。

  

无法初始化该类型的实例   ' MonoTouch.Foundation.NSUrl':原生' initWithString:'方法   返回零。可以通过设置忽略此条件   MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure为false。

5 个答案:

答案 0 :(得分:3)

试试这个:

public void UpdateCell (string subtitle2)
{
    //Makes a new NSUrl
    var callURL = new NSUrl("tel:" + subtitle2);

    call.SetTitle(subtitle2, UIControlState.Normal);
    call.TouchUpInside += (object sender, EventArgs e) => {
    if (UIApplication.SharedApplication.CanOpenUrl (callURL)) {
    //After checking if phone can open NSUrl, it either opens the URL or outputs to the console.

        UIApplication.SharedApplication.OpenUrl(callURL);
    } else {
    //OUTPUT to console

    Console.WriteLine("Can't make call");
    }
  };          
}

不确定是否可以在iPhone模拟器中模拟电话,否则只需连接您的设备: - )

答案 1 :(得分:3)

如其他答案中所述,NSUrl无法处理URL字符串中的空格(以及其他一些符号)。在传递给NSUrl构造函数之前,应对这些符号进行编码。您可以使用NSString.CreateStringByAddingPercentEscapes方法进行编码。 另一种方法是使用.NET Uri类:

new NSUrl(new Uri("tel:" + subtitle2).AbsoluteUri)

您可能遇到的问题是Uri类解析模式。为避免这种情况,请不要使用://,因此,网址字符串应显示为"tel:(123) 345-7890",而不是"tel://(123) 345-7890"

答案 2 :(得分:2)

尝试

UIApplication.SharedApplication.OpenUrl(new NSUrl("tel://" + subtitle2));

答案 3 :(得分:2)

此错误表示调用initWithString:已返回nil。 ObjC init*方法可以返回nil,而.NET构造函数可以返回(和抛出)。

通常,当输入参数无效时,ObjC会在nil选择器上返回init*。在这种情况下,我怀疑您的网址格式无效。

您的subtitle2变量的内容是什么?

答案 4 :(得分:2)

我在尝试了各种方法之后,通过最终确定在数字之间不应该有任何空格(而不是1800 111 222 333,应该像1800111222333)来解决相同的问题的iOS。

number = number.Replace(" ", "");

NSUrl url = new NSUrl(string.Format(@"telprompt://{0}", number));
return UIApplication.SharedApplication.OpenUrl(url);