是否可以对 UILabel 进行电话呼叫操作?

Posted

技术标签:

【中文标题】是否可以对 UILabel 进行电话呼叫操作?【英文标题】:Is it possible to give a phone Call action to a UILabel? 【发布时间】:2014-03-10 22:34:43 【问题描述】:

我在我的应用程序中以编程方式将 Parse.com 中的字符串提取到 UILabel 中。 字符串是电话号码。所以我的问题是,是否可以在点击时对 UILabel 进行操作以拨打电话。或者我是否必须从按钮中获取数据,或者更好的是,这可能吗?

如果可以,我应该怎么做?有人有我可以遵循的示例或教程吗? 任何帮助,将不胜感激。 谢谢!

【问题讨论】:

【参考方案1】:

你的问题分为两部分:

    在录制 UILabel 时执行任何类型的操作 执行电话操作(第一部分中使用的操作)

首先,要在标签被粘贴时执行操作,您必须向该标签添加轻击手势识别器:

phoneNumberLabel.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture = 
   [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(phoneNumberLabelTap)];
[phoneNumberLabel addGestureRecognizer:tapGesture];

然后你必须实现你的 phoneNumberLabelTap 方法:

 -(void)phoneNumberLabelTap

    NSURL *phoneUrl = [NSURL URLWithString:[NSString stringWithFormat:@"telprompt:%@",phoneNumberLabel.text]];

    if ([[UIApplication sharedApplication] canOpenURL:phoneUrl]) 
        [[UIApplication sharedApplication] openURL:phoneUrl];
     else 
        UIAlertView * calert = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"Call facility is not available!!!" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
        [calert show];
    

【讨论】:

这太棒了!!我有一个小问题,我相信这是因为我在子视图中有这个 UILabel(也许?)我收到使用未声明标识符的错误。 嘿,又是我.. 我想知道如何在 safari 中打开网站并在 Facebook 中打开页面?字符串格式会怎样?谢谢:)! 又是我,没关系!想通了网站..现在正在寻找 Facebook! 我与 Facebook 的唯一互动是使用 Parse 登录并获取有关用户的一些信息。您应该在 SO 中寻找“Facebook URL scheme ios”,有很多答案,但我从未尝试过其中任何一个,所以我无法为您提供更多自定义 URL 的帮助,抱歉! 如果您遇到需要它:,我想通了。这是代码:- (void)goFbPage:(UITapGestureRecognizer *)tapFbPage NSURL *facebookURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@", label.text]]; if ([[UIApplication sharedApplication] canOpenURL:facebookURL]) [[UIApplication sharedApplication] openURL:facebookURL]; else make you alert here.. 请记住,您的字符串必须遵循以下格式:fb://profile/thepageidnumber【参考方案2】:

在 swift 3.0 中

   mobileLabel.isUserInteractionEnabled = true;
    let tap = UITapGestureRecognizer(target: self, action:#selector(self.phoneNumberLabelTap))

    tap.delegate = self
    mobileLabel.addGestureRecognizer(tap)


func phoneNumberLabelTap()



    let phoneUrl = URL(string: "telprompt:\(mobileLabel.text ?? "")")!

    if(UIApplication.shared.canOpenURL(phoneUrl)) 

        UIApplication.shared.openURL(phoneUrl)
    
    else 

        Constants.ShowAlertView(title: "Alert", message: "Cannot place call", viewController: self, isFailed: false)

    

【讨论】:

以上是关于是否可以对 UILabel 进行电话呼叫操作?的主要内容,如果未能解决你的问题,请参考以下文章

使用没有alertView的UIWebView在iOS中以编程方式进行电话呼叫

用于构建 VOIP 电话呼叫的 Java SipServlet(在计算机和模拟电话/移动设备之间)

使用 Callkit 接听电话后如何保持原生 UI

使用iOS核心电话框架进行呼叫录音

呼叫保持

是否可以为 UILabel 分配可访问性操作?