长按自定义复选框

时间:2016-09-05 17:56:59

标签: javascript android reactjs checkbox react-native

我试图在复选框上创建一个长按处理程序。包含组件的包是https://www.npmjs.com/package/react-native-checkbox - 我认为它是默认包。问题是复选框拦截了onPressInonPressOut个事件,而我的TouchableWithoutFeedback组件没有发出任何内容。这是代码:

    var pressStart = 0;
    const pressTimeout = 400;

    function pressIn() {
        alert(0);

        pressStart = parseInt((new Date()).getTime() / 1000);
    }

    function pressOut() {
        var pressEnd = parseInt((new Date()).getTime() / 1000);
        if (pressEnd - pressStart < pressTimeout) return;

        alert(1);
    }

    return (
        <View style={style.container}>
            <TouchableWithoutFeedback onPressIn={pressIn} onPressOut={pressOut}>
                <View>
                    {/*<Text>asdasdasd</Text>*/}
                    <CheckBox checked={this.state.done} labelStyle={style.checkbox} label={this.state.name} onChange={toggleChecked} />
                </View>
            </TouchableWithoutFeedback>
        </View>
    );

此外,如果我使用Text组件而不是CheckBox - 它会触发pressIn事件,但pressOut无效(我看alert(0) },但不是alert(1))。

1 个答案:

答案 0 :(得分:0)

好的,首先,我已经从支持react-native-checkboxonPressIn事件的onPressOut包中创建了一个分支: https://www.npmjs.com/package/react-native-checkbox-touch-events

但是我觉得它没用,因为你可以这样做(我不承诺它有效):

<TouchableWithoutFeedback delayPressIn={0} onPressIn={pressIn} onPressOut={pressOut}>
    <View>
        <CheckBox onPress={press} />
    </View>
</TouchableWithoutFeedback>

无论如何,我会使用我的包裹,我太懒了,无法测试这个解决方案,也不想对我的工作感到失望。

并且:如果你想要毫秒,不要将getTime()除以1000 ......