acton <[email protected]>于2018年2月27日 周二下午5:21写道:
> I guess the reason is applications windows location, you can try to debug > by po all the windows both in your application and Weex Playground app > > the toast try to find a superview by getting the application windows. > > 2018-02-27 17:14 GMT+08:00 许有红 <[email protected]>: > > > Toast cannot be displayed in your project, but can be displayed in the > > playground. My environment is as follows: > > > > weexSDK: 0.18.0 > > $ weex -v > > v1.1.0-beta.7 > > - weexpack : v0.4.7-beta.26 > > - weex-builder : v0.2.13-beta.4 > > - weex-devtool : v0.3.2-beta.11 > > - weex-previewer : v1.3.13-beta.10 > > > > The vue code is as follows: > > > > <template> > > <list> > > <cell @click="cellClicked(0)"> > > <text>点我有弹框</text> > > </cell> > > </list> > > </template> > > > > <script> > > const { toast } = require('./util.js'); > > const navigator = weex.requireModule('navigator'); > > > > export default { > > methods: { > > cellClicked() { > > const modal = weex.requireModule('modal'); > > modal.toast({ > > message: '123120----3123', > > duration: 1, > > }); > > } > > } > > } > > </script> > > > > > > According to 'https://github.com/alibaba/weex/issues/2183', the > following > > solution is found: > > > > - (void)toast:(NSString *)message duration:(double)duration > > { > > WXAssertMainThread(); > > // UIView *superView = [[[UIApplication sharedApplication] windows] > > objectAtIndex:0]; > > // 将上行的代码该为下行就好了。 > > UIView *superView = [[[UIApplication sharedApplication] windows] > > lastObject]; > > if (!superView) { > > superView = self.weexInstance.rootView; > > } > > UIView *toastView = [self toastViewForMessage:message > > superView:superView]; > > WXToastInfo *info = [WXToastInfo new]; > > info.toastView = toastView; > > info.superView = superView; > > info.duration = duration; > > [[WXToastManager sharedManager].toastQueue addObject:info]; > > > > if (![WXToastManager sharedManager].toastingView) { > > [self showToast:toastView superView:superView duration:duration]; > > } > > } > > > > > > Q:Why doesn't the same code work in my project, but in the playground? > > I compared windows in two applications to get the following results. playground: (lldb) po [[UIApplication sharedApplication] windows] <__NSArrayM 0x600000057430>( <UIWindow: 0x7fa239f00970; frame = (0 0; 414 736); gestureRecognizers = <NSArray: 0x60c000049540>; layer = <UIWindowLayer: 0x60c000033640>>, <WXWindow: 0x7fa239e06580; baseClass = UIWindow; frame = (110 0; 60 40); gestureRecognizers = <NSArray: 0x60400025a940>; layer = <UIWindowLayer: 0x604000222320>>, <ATBaseWindow: 0x7fa239e03a30; baseClass = UIWindow; frame = (0 0; 414 736); gestureRecognizers = <NSArray: 0x60c000049780>; layer = <UIWindowLayer: 0x60c0000338e0>> ) my APP: (lldb) po [[UIApplication sharedApplication] windows] <__NSArrayM 0x608000252e10>( <UIWindow: 0x7fe9dc106b50; frame = (0 0; 375 812); hidden = YES; gestureRecognizers = <NSArray: 0x6080002510d0>; layer = <UIWindowLayer: 0x60800003e2c0>>, <UIWindow: 0x7fe9dc10db10; frame = (0 0; 375 812); gestureRecognizers = <NSArray: 0x608000251970>; layer = <UIWindowLayer: 0x608000222020>> ) The first window in my project was hidden, so toast couldn't find superView. In addition to modifying the SDK code, can you give us some Suggestions? >
