如何“排外”处理多点触摸事件

    经常有网友问,如何避免同时处理多个多点触摸事件?实际上,在Apple的官方文档中已经提供了解决方案。

    Apple在UIView的multipleTouchEnabled属性的讨论中提到:如果你希望这个视图“排外”处理多点触摸事件,只需要把组的这一属性,属性的值是multipleTouchEnabled和exclusivetouch的值同时设为YES。

multipleTouchEnabled
A Boolean value that indicates whether the receiver handles multi-touch events.

@property(nonatomic, getter=isMultipleTouchEnabled) BOOL multipleTouchEnabled
Discussion
When set to YES, the receiver receives all touches associated with a multi-touch sequence. When set to NO, the receiver receives only the first touch event in a multi-touch sequence. The default value of this property is NO.

Other views in the same window can still receive touch events when this property is NO. If you want this view to handle multi-touch events exclusively, set the values of both this property and the exclusiveTouch property to YES.

Availability
Available in iOS 2.0 and later.
See Also
  @property exclusiveTouch
Related Sample Code
aurioTouch2
Declared In
UIView.h



从您的需求来看,当用户选择「年月」时,您希望自动将 「筛选范围」设置为「全部数据」。以下是具体的解决方案: ### 修改方案 我们需要监听 `Form.Item` 中名为 `date` 字段的变化,并在变化触发时更新状态(例如通过回调函数或组件的状态管理工具)。下面是调整后的代码示例: #### 示例代码 ```jsx <div style={{ display: "block", width: "100%", marginRight: "30px" }}> {/* 年月字段 */} <Form.Item label="年月" name="date" style={{ width: '100%' }} > <Space style={{ width: '100%' }} direction="vertical"> <Select placeholder={"请选择"} options={getDateSelect} onChange={(value) => { dateHandleChange(value); // 触发原有逻辑 form.setFieldsValue({ 筛选范围: "全部数据" }); // 自动设置筛选范围为“全部数据” }} /> </Space> </Form.Item> </div> <div id='s3' style={{ display: "block", width: "100%", marginRight: "20px" }}> {/* 筛选范围字段 */} <Form.Item label="筛选范围" name="筛选范围" style={{ width: '100%', marginLeft: "30px" }} > <Space style={{ width: '100%' }} direction="vertical"> <Select ref={selectRef2} style={{ width: '120px' }} placeholder={"请选择"} options={[ { value: '全部数据', label: '全部数据' }, { value: '合格数据', label: '合格数据' }, { value: '不合格数据', label: '不合格数据' }, { value: '排外数据', label: '排外数据' }, ]} value={state} onChange={(value) => { if (value === "合格数据") { setState("合格数据"); } else if (value === "不合格数据") { setState("不合格数据"); } else if (value === "全部数据") { setState("全部数据"); } else if (value === "排外数据") { setState("排外数据"); } }} /> </Space> </Form.Item> </div> ``` --- ### 关键点解析 1. **`onChange` 回调** - 我们对 `<Select />` 组件的 `onChange` 属性进行了增强处理。 - 当用户更改了「年月」的选择项时,除了原有的 `dateHandleChange` 函数逻辑之外,还调用了 `form.setFieldsValue()` 来强制更新表单值。 2. **`setFieldsValue` 方法** - Ant Design 的 Form 提供了一个便捷方法 `setFieldsValue`,可以直接修改指定字段的值而无需重新渲染整个表单项。 - 在本案例中,我们通过该方法将「筛选范围」设为了「全部数据」。 3. **初始值同步** - 如果需要初始化某些默认选项,请确保在 `initialValues` 或者状态管理层面上明确设定对应的值。 4. **用户体验优化** - 此种设计提升了交互体验,避免了用户多次手动切换的情况。 --- ### 测试建议 完成上述改动后,您可以测试以下场景是否正常工作: - 用户首次加载页面时,默认无任何选项被选中; - 用户选择某个特定的「年月」后,观察「筛选范围」是否会自动变为「全部数据」; - 再次更改制其他条件时,检查是否有冲突现象发生。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值