如何为自定义 uicontrol 和控制器添加触摸事件?

     2023-03-10     285

关键词:

【中文标题】如何为自定义 uicontrol 和控制器添加触摸事件?【英文标题】:How to add touch event for custom uicontrol and controller? 【发布时间】:2017-09-10 21:50:51 【问题描述】:

我有一个具有三个子视图的自定义 UIControl。每个子视图,我添加一个目标:

button.addTarget(self, action: #selector(buttonTapped(clickedBtn:)), for: .touchUpInside)

在那个函数buttonTapped中,它会做一些特殊的动画来做一些过渡(它模仿分段控制)。

现在,在这个自定义 UIControl 所在的 ViewController 中,必须知道它何时被触摸。我为自定义 UIControl 创建了一个与触摸事件交互的 @IBAction 函数。

问题是,这是不可能的(据我所知)。如果我将目标触摸事件添加到子视图,则不会调用父触摸事件。要让父视图调用@IBAction 函数,我必须设置所有子视图的 setUserInteractiveEnabledtotrue`。当我这样做时,不会调用子视图的触摸事件函数。

我需要调用两个触摸事件函数。我怎样才能做到这一点?或者解决这个问题的最佳方法是什么?

【问题讨论】:

能否将整个自定义控件设为IBAction,然后在.touchUpInside中确定哪个子视图被点击了? 【参考方案1】:

使用委托,在 UIControl 中添加一个需要在 ViewController 中实现的协议

通过这种方式,您可以检测是否单击了 UIControl 中的按钮并调用 VC 中的特定函数。

例如:

//YourUIControl.Swift
protocol YourUIControlDelegate 
  func didTapFirstButton()


class YourUiControl : UIView  //I'm assuming you create your UIControl from UIView

  var delegate : YourUIControlDelegate?
  //other codes here
  .
  .
  .
  @IBAction func tapFirstButton(_ sender: AnyObject) 
     if let d = self.delegate 
       d.didTapFirstButton()
     
  


//YourViewController.Swift
extension YourViewController : UIControlDelegate 
  func didTapFirstButton() 
     //handle first button tap here
  

【讨论】:

成功了!我唯一需要添加的是在YourViewController 中,在viewDidLoad 中,您需要将YourUIControl 委托设置为self。

在自定义 UIControl 对象中定义自定义触摸区域

】在自定义UIControl对象中定义自定义触摸区域【英文标题】:DefinecustomtouchareaincustomUIControlobject【发布时间】:2014-02-2716:00:17【问题描述】:我正在创建一个自定义UIControl对象,详细说明here。除了触摸区域外,一切都运行良好。... 查看详情

自定义 UIControl,动作调用两次

】自定义UIControl,动作调用两次【英文标题】:CustomUIControl,actioncalledtwice【发布时间】:2016-04-1415:39:41【问题描述】:我正在尝试创建UIControl的子类并跟踪触摸以更改控件外观。我不知道为什么,但是如果我从IB或代码添加操作... 查看详情

如何为分析添加 Firebase 自定义事件?

】如何为分析添加Firebase自定义事件?【英文标题】:HowtoaddFirebasecustomeventsforanalytics?【发布时间】:2017-03-2119:37:26【问题描述】:我已经看到一些关于Firebase分析的自定义事件的问题和答案,但我只是想问你一个直截了当的问题... 查看详情

如何为 UIPageViewController Delegate 制作自定义类?

...编写一个带有UIPageViewController的iOS应用程序。我的根视图控制器是ViewController,我在它下面添加了UIPageViewControlle 查看详情

如何为 GitHub 组织添加自定义用户角色?

】如何为GitHub组织添加自定义用户角色?【英文标题】:HowtoaddcustomuserrolesforaGitHuborganisation?【发布时间】:2016-09-2413:04:15【问题描述】:GitHub上的组织中有两个默认用户角色:“admin”和“member”。如何进一步引入角色并配置其... 查看详情

如何为自定义对象的 ArrayList 添加 parcelable 实现?

】如何为自定义对象的ArrayList添加parcelable实现?【英文标题】:HowtoaddtheparcelableimplementationforArrayListofCustomobject?【发布时间】:2021-12-0202:02:55【问题描述】:我创建了一个包含自定义对象的ArrayList和一些其他字符串变量的类。我... 查看详情

如何为自定义表格视图单元格中的按钮单击获取不同的视图控制器

...何为自定义表格视图单元格中的按钮单击获取不同的视图控制器【英文标题】:HowdoIgetdifferentviewcontrollersforabuttonclickincustomtableviewcell【发布时间】:2018-07-0507:22:51【问题描述】:如何为通过自定义tableViewCell提供的按钮中的不同... 查看详情

如何为 UITableView 中的单元格添加复选标记(使用自定义 UITableViewCell 子类和 dequeueReusableCell)

】如何为UITableView中的单元格添加复选标记(使用自定义UITableViewCell子类和dequeueReusableCell)【英文标题】:HowtoaddacheckmarktocellsinUITableView(usingacustomUITableViewCellsubclassanddequeueReusableCell)【发布时间】:2020-12-3115:27:09【问题描述】:... 查看详情

如何为颤振添加自定义颜色?

】如何为颤振添加自定义颜色?【英文标题】:howtoaddcustomcolortoflutter?【发布时间】:2018-11-0601:17:37【问题描述】:我想更改AppBar的颜色并为其使用自定义颜色,我尝试了很多选项,但似乎都不起作用。我有什么遗漏吗?import\'pa... 查看详情

如何为 UITableView 添加自定义 EditingAccessoryView?

】如何为UITableView添加自定义EditingAccessoryView?【英文标题】:HowtoaddCustomEditingAccessoryViewforUITableView?【发布时间】:2010-10-2508:01:27【问题描述】:我想在单元格中添加自定义EditingAccessoryView,当用户滑动代替删除按钮时,我想显... 查看详情

如何为 ZuulException 自定义 Spring Boot 控制器 API 响应

】如何为ZuulException自定义SpringBoot控制器API响应【英文标题】:HowtocustomizeSpringbootcontrollerAPIresponseforZuulException【发布时间】:2019-04-1505:24:16【问题描述】:我们正在为RESTAPI使用Zuul、Eureka和SpringBoot应用程序服务。假设我的springboo... 查看详情

如何为 UIControls 组设置单个 VoiceOver

】如何为UIControls组设置单个VoiceOver【英文标题】:HowtosetsingleVoiceOverforgroupofUIControls【发布时间】:2017-11-0122:22:18【问题描述】:我有一个UIButton和一个UILabel嵌入在一个UIStackView中,在InterfaceBuilder中看起来像这样:通过设置UIStack... 查看详情

自定义 UIControl 和手势识别器

】自定义UIControl和手势识别器【英文标题】:CustomUIControlandGestureRecognizer【发布时间】:2013-09-0215:37:31【问题描述】:我正在尝试创建一个类似于滑块的自定义UIControl。此控件将成为一个视图的子视图,该视图还附加了一个点击... 查看详情

如何为自定义 FontFamily 添加权重?

】如何为自定义FontFamily添加权重?【英文标题】:HowtoaddweighttocustomFontFamily?【发布时间】:2017-04-0701:12:46【问题描述】:我有多个来自同一家族的.ttf文件,例如:MyFont.ttfMyFont_Bold.ttfMyFont_Light.ttfMyFont_Medium.ttf如果我想使用每个权... 查看详情

如何为 Firebase (Kotlin) 创建自定义身份验证

】如何为Firebase(Kotlin)创建自定义身份验证【英文标题】:HowCanICreateCustomAuthForFirebase(Kotlin)【发布时间】:2021-12-1918:04:42【问题描述】:我想使用用户名、密码和电子邮件将用户添加到Firebase。我正在使用电子邮件密码登录方法,... 查看详情

如何为自定义 nemo 操作添加键盘快捷键?

】如何为自定义nemo操作添加键盘快捷键?【英文标题】:Howtoaddkeyboardshortcutforcustomnemoaction?【发布时间】:2016-12-2913:46:04【问题描述】:我有一个自定义nemo操作,如下所述:https://wiki.archlinux.org/index.php/Nemo#Nemo_Actions如何为此操... 查看详情

如何为自定义 UITableView 标题部分笔尖添加分隔线? [复制]

】如何为自定义UITableView标题部分笔尖添加分隔线?[复制]【英文标题】:HowdoIaddaseparatorlineforacustomUITableViewheadersectionnib?[duplicate]【发布时间】:2017-04-2206:56:57【问题描述】:我按照这个答案here中的说明操作并设法获得我的自定... 查看详情

Flask Mail:如何为发件人添加自定义名称?

】FlaskMail:如何为发件人添加自定义名称?【英文标题】:FlaskMail:howtoaddcustomnametothesender?【发布时间】:2019-04-2416:37:11【问题描述】:我正在使用Flask邮件发送电子邮件。一切正常,除了我注意到发件人姓名只是电子邮件的第一... 查看详情