acton <[email protected]>于2018年2月27日 周二下午5:43写道:

> you can try `[UIApplication shareApplication].keyWindow` may be ok,  if the
> toast view needs to be displayed, the superView must be the keyWindow,
> maybe this is a bug for toast module.
>
> if it works, you can open an pull request to hep us fix it
>
> 2018-02-27 17:38 GMT+08:00 许有红 <[email protected]>:
>
> > 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?
> >
> >
> > >
> >
>





I got it!  Thanks!    :)

Reply via email to