Skip to content

Commit e4364fa

Browse files
zhongwuzwfacebook-github-bot
authored andcommitted
Fixes alert view block first responder (facebook#23240)
Summary: Fixes facebook#23076 , the reason is `blur()` is managed by `UIManager`, `UIManager` maintains all operations and execute them each `batchDidComplete`, which means every time `JS` finish callback native , but `Alert` module would call directly, this mess up the order of method call, for example like below, even `this.$input.blur()` is called before `Alert.alert()`, but in native side, `Alert.alert()` is called before `this.$input.blur()`. ``` <TextInput style={{ borderWidth: 1 }} ref={$input => this.$input = $input} /> <Button title="Show Alert" onPress={() => { // // `blur` works if using without `Alert` this.$input && this.$input.blur() // // `blur` is not working Alert.alert('show alert', 'desc', [ { text: 'cancel', style: 'cancel' }, { text: 'show', onPress: () => { }}, ]) }} /> ``` [iOS] [Fixed] - Fixes alert view block first responder After fix, example like below, `blur` can works. ``` import * as React from 'react'; import { TextInput, View, Alert, Button } from 'react-native'; export default class App extends React.Component { render() { return ( <View style={{ flex: 1, justifyContent: 'center' }}> <TextInput style={{ borderWidth: 1 }} ref={$input => this.$input = $input} /> <Button title="Show Alert" onPress={() => { this.$input && this.$input.blur() Alert.alert('show alert', 'desc', [ { text: 'cancel', style: 'cancel' }, { text: 'show', onPress: () => { }}, ]) }} /> </View> ); } } ``` Pull Request resolved: facebook#23240 Differential Revision: D13915920 Pulled By: cpojer fbshipit-source-id: fe1916fcb5913e2b8128d045a6364c5e3d39c516
1 parent 07d1075 commit e4364fa

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

React/Modules/RCTAlertManager.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,9 @@ - (void)invalidate
177177
}
178178
[_alertControllers addObject:alertController];
179179

180-
[presentingController presentViewController:alertController animated:YES completion:nil];
180+
dispatch_async(dispatch_get_main_queue(), ^{
181+
[presentingController presentViewController:alertController animated:YES completion:nil];
182+
});
181183
}
182184

183185
@end

0 commit comments

Comments
 (0)