我同时使用TabVIEwController和NavigationController.这两个标签是RECENT和POPulAR,它们显示了一个帖子列表.想象一下,您在RECENT选项卡中并单击一个帖子,然后进入postsShow视图.所以你在导航堆栈中更深.当您转到“热门”选项卡并返回“最近”选项卡时,您仍然可以看到之前单击的帖子.但我想显示一个帖子列表.
我在想什么:
我正在设置postsShowVIEwController一个TabbarControllerDelegate,当选择一个标签项时,我试图d出到它的根视图控制器.然后,当用户回来时,他将看到rootVIEwController,它是帖子列表而不是postsShow视图.
码:
vIEwDIDAppear
self.tabbarController.delegate = self;
vIEwDIDdisappear
self.tabbarController.delegate = nil;
头
UITabbarControllerDelegate
- (BOol) tabbarController:(UITabbarController *)tabbarController shouldSelectVIEwController:(UIVIEwController *)vIEwController { [self.navigationController popToRootVIEwControllerAnimated:NO]; return YES;}
它是如何工作的:
>转到最近的标签
>点击帖子转到postsShow视图
>转到热门标签
>返回最近的标签(我希望看到帖子列表而不是postsShow视图)
>错误! EXC_BAD_ACCESS
编辑:
根据答案建议的做法,我得到一个稍好的行为但仍然最终出现错误.
码
- (voID)tabbarController:(UITabbarController *)tabbarController dIDSelectVIEwController:(UIVIEwController *)vIEwController{ UINavigationController *navigation = (UINavigationController*) vIEwController; [navigation popToRootVIEwControllerAnimated:NO];}
>转到最近的标签
>点击帖子转到postsShowvIEw
>转到热门标签
>返回最近的标签
>我看到一个帖子列表(没有错误!)
>返回热门标签:ERR_BAD_ACCESS!
编辑:
这是我的故事板
EDIT2:
全栈跟踪:
* thread #1: tID = 0x4a37c,0x0000000197bb7bd0 libobjc.A.dylib`objc_msgSend + 16,queue = 'com.apple.main-thread',stop reason = EXC_BAD_ACCESS (code=1,address=0x10) frame #0: 0x0000000197bb7bd0 libobjc.A.dylib`objc_msgSend + 16 frame #1: 0x000000018ab52078 UIKit`-[UITabbarController _tabbarItemClicked:] + 104 frame #2: 0x000000018a9891ec UIKit`-[UIApplication sendAction:to:from:forEvent:] + 96 frame #3: 0x000000018ab51fb4 UIKit`-[UITabbar _sendAction:withEvent:] + 468 frame #4: 0x000000018a9891ec UIKit`-[UIApplication sendAction:to:from:forEvent:] + 96 frame #5: 0x000000018a9722c8 UIKit`-[UIControl _sendActionsForEvents:withEvent:] + 612 frame #6: 0x000000018ab51bec UIKit`-[UITabbar(Static) _buttonUp:] + 128 frame #7: 0x000000018a9891ec UIKit`-[UIApplication sendAction:to:from:forEvent:] + 96 frame #8: 0x000000018a9722c8 UIKit`-[UIControl _sendActionsForEvents:withEvent:] + 612 frame #9: 0x000000018a988b88 UIKit`-[UIControl touchesEnded:withEvent:] + 592 frame #10: 0x000000018a947da8 UIKit`_UIGestureRecognizerUpdate + 8536 frame #11: 0x0000000185e8fff0 CoreFoundation`__CFRUNLOOP_IS_CALliNG_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 32 frame #12: 0x0000000185e8cf7c CoreFoundation`__CFRunLoopDoObservers + 360 frame #13: 0x0000000185e8d35c CoreFoundation`__CFRunLoopRun + 836 frame #14: 0x0000000185db8f74 CoreFoundation`CFRunLoopRunspecific + 396 frame #15: 0x000000018f8136fc GraphiCSServices`GSEventRunModal + 168 frame #16: 0x000000018a9bad94 UIKit`UIApplicationMain + 1488 * frame #17: 0x0000000100023ff4 toaster-objc`main(argc=1,argv=0x000000016fdeba50) + 124 at main.m:14 frame #18: 0x000000019824ea08 libdyld.dylib`start + 4解决方法 这是我在swift中的表现:
func tabbarController(tabbarController: UITabbarController,dIDSelectVIEwController vIEwController: UIVIEwController) { self.tabbarSelectedindex = tabbarController.selectedindex var navigation = vIEwController as! UINavigationController navigation.popToRootVIEwControllerAnimated(false) // rest of the logic}
类似于Objective-C:
- (voID)tabbarController:(UITabbarController *)tabbarController dIDSelectVIEwController:(UIVIEwController *)vIEwController { self.tabbarSelectedindex = tabbarController.selectedindex; UINavigationController *navigation = (UINavigationController*) vIEwController; [navigation popToRootVIEwControllerAnimated:NO];}
请注意,我使用了UITabbarController的dIDSelectVIEwController方法.
你可以检查它here:
总结以上是内存溢出为你收集整理的ios – 选择另一个选项卡时的popToRootViewController全部内容,希望文章能够帮你解决ios – 选择另一个选项卡时的popToRootViewController所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)