Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 您能否检测到在Intents UI扩展中点击了哪个组件?_Ios_Swift_Sirikit_Sirishortcuts - Fatal编程技术网

Ios 您能否检测到在Intents UI扩展中点击了哪个组件?

Ios 您能否检测到在Intents UI扩展中点击了哪个组件?,ios,swift,sirikit,sirishortcuts,Ios,Swift,Sirikit,Sirishortcuts,我有一个用于Siri快捷方式的UI扩展,我希望我在Siri中显示的视图在单击不同部分时可以执行不同的操作。例如,我正在显示来自不同系统的联系人的一些联系信息,我希望在单击电话号码时拨打电话号码,并在单击地址时打开带有方向的地图。我能够检测到应用程序何时被打开,因为视图中的任何内容都被单击了,但我无法检测到被单击的特定元素 这是我代码的要点,为了简洁起见删除了部分 class IntentViewController: UIViewController, INUIHostedViewControl

我有一个用于Siri快捷方式的UI扩展,我希望我在Siri中显示的视图在单击不同部分时可以执行不同的操作。例如,我正在显示来自不同系统的联系人的一些联系信息,我希望在单击电话号码时拨打电话号码,并在单击地址时打开带有方向的地图。我能够检测到应用程序何时被打开,因为视图中的任何内容都被单击了,但我无法检测到被单击的特定元素

这是我代码的要点,为了简洁起见删除了部分

class IntentViewController: UIViewController, INUIHostedViewControlling {

    func configureView(for parameters: Set<INParameter>, of interaction: INInteraction, interactiveBehavior: INUIInteractiveBehavior, context: INUIHostedViewContext, completion: @escaping (Bool, Set<INParameter>, CGSize) -> Void) {
        let viewSize = configureUI(with: intent, of: interaction)
        completion(true, [], viewSize)
    }

    private func configureUI(with intent: PersonInfoIntent, of interaction: INInteraction) -> CGSize {
        let vc = UIViewController()
        addChild(vc)
        view.addSubview(vc.view)

        let nameLabel = UILabel(text: name)
        vc.view.addSubview(nameLabel)

        let phoneLabel = UILabel(text: phoneNumber)
        vc.view.addSubview(phoneLabel)

        let addressLabel = UILabel(text: address)
        vc.view.addSubview(address)

        // This does not result in openMap being called
        // let addressTapped = UITapGestureRecognizer(target: self, action: #selector(openMap))
        // addressLabel.addGestureRecognizer(addressTapped)

        return self.extensionContext!.hostedViewMaximumAllowedSize
    }
}
class IntentViewController:UIViewController,InuIHostViewControl{
func configureView(参数:Set,交互类型:INInteraction,interactiveBehavior:INUIInteractiveBehavior,上下文:InuiHostDeviewcontext,完成:@escaping(Bool,Set,CGSize)->Void){
让viewSize=configureUI(具有:意图,of:交互)
完成(true,[],viewSize)
}
private func configureUI(意图:PersonInfoIntent,交互方式:INInteraction)->CGSize{
设vc=UIViewController()
addChild(vc)
view.addSubview(vc.view)
让nameLabel=UILabel(文本:名称)
vc.view.addSubview(名称标签)
让phoneLabel=UILabel(文本:phoneNumber)
vc.view.addSubview(电话标签)
让addressLabel=UILabel(文本:地址)
vc.view.addSubview(地址)
//这不会导致调用openMap
//让addressTapped=UITappestureRecognitor(目标:自我,操作:#选择器(openMap))
//addressLabel.AddGestureRecognitor(addressTapped)
返回self.extensionContext!.hostedViewMaximumAllowedSize
}
}
我尝试过使用
ui按钮
addTarget
而不是带有手势识别器的
ui标签
,但这也不会触发
openMap

我希望能够检测被点击的元素,这样我就可以在我的
活动.userInfo
上设置它,并在我的
AppDelegate.application(:,continue:,restorationHandler:)
,在那里我可以执行一些操作,比如打开地图并指明方向,或者拨打电话号码