我一直试图在/**
* Before SharkORM attempts an operation it will ask the
* persitable class if it would like to continue with this operation.
*
* @return BOOL if YES is returned then SharkORM WILL complete the operation
* and it is guaranteed to complete. All pre-requisite checks have been made
* and the statement compiled before getting to this point.
* It is safe to use this method to cascade operations to other classes.
* In the case of delete, you might wish to delete related records, or
* indeed remove this object from related tables.
*/
- (BOOL)entityWillDelete;
的{{1}}内抓住键盘的事件。
通过阅读组件的文档(https://facebook.github.io/react-native/docs/textinput.html),我注意到TextInput
函数完全符合我的需要。但它仅标记为react-native
。我没有找到关于onKeyPress
解决方法的任何内容,除了此问题(https://github.com/facebook/react-native/issues/1882)已暂停几个月了...
我需要做的是在按下ios
时调用特定方法,看起来现在只能对android
进行...
你们知道有什么解决办法吗?
提前致谢:)
答案 0 :(得分:2)
我也遇到过这个问题。我可以告诉你,我做了什么。它不优雅,但它会完成这项工作,直到它也为Android实现。
在Android中,您可以在“活动”中handle key events。此外,您可以send events to JavaScript。这就是你需要的一切。
在js文件中(例如componentDidMount)添加侦听器。
DeviceEventEmitter.addListener('onKeyPressed', yourFunction)
在您的MainActivity中添加类似的内容。
public boolean onKeyUp(int keyCode, KeyEvent event) {
WritableMap params;
// params.put something
// filter only Backspace events if you wish etc.
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("onKeyPressed", params);
}
每按一次键就会发送一次。不要忘记删除听众(例如componentDidUnmount或任何你不再需要它)。此外,如果您有多个TextInput
,请跟踪重点是什么,这样您就不会混淆它。
希望这有帮助。
答案 1 :(得分:2)
onKeyPress
。
从版本v0.55.2
(commit)
注意Android上不支持硬件键盘输入,只有软键盘输入。
意思是,如果您在Android模拟器上进行测试并在计算机键盘上键入,则不会处理这些输入。 所以,继续用鼠标按下仿真器上的软键盘。
答案 2 :(得分:1)
将此添加到您的MainActivity.java
import com.facebook.react.modules.core.DeviceEventManagerModule;
import android.view.KeyEvent;
...
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
getReactNativeHost().getReactInstanceManager().getCurrentReactContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("onKeyPressed", keyCode);
return super.onKeyUp(keyCode, event);
}
现在,这将返回与按下的按钮相对应的keyCode
将此添加到您的组件以侦听发出的keyCode,例如我在componentWillMount
中添加了侦听器componentWillMount = () => {
this.keyPressedListener = DeviceEventEmitter.addListener('onKeyPressed', yourFunction);
}
请根据需要处理您的Function,不要忘了之后删除监听器。
答案 3 :(得分:0)
您可以使用TextInput的onChangeText并在提供给onChangeText的函数内部,检查最后输入的文本是否比TextInput中的早期文本少一个字符。如果有,则表示用户按下了退格键,您可以触发/调用您的特定方法。
class SearchScreenBase extends Component {
constructor(props) {
super(props);
this.state = { lastText: '',
};
// Bind callback methods to make `this` the correct context.
this._onChange = this._onChange.bind(this);
}
_onChange(newText) {
var oldText = this.state.lastText;
if(newText.length === (oldText.length-1)){
//INSERT TRIGGER FUNCTION HERE
}
this.setState({
lastText: newText
});
}
render() {
return (
<TextInput
onChangeText = {this._onChange}
editable = {true}
maxLength = {40}
/>
);
}
}
它很适合我。