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