ios – UIViewController removeFromSuperview错误

ios – UIViewController removeFromSuperview错误,第1张

概述我有一个UIViewController然后当我长按到self.view它会推出一个d出窗口(MenuViewController).但是当我尝试通过removeFromSuperview删除d出窗口时,它仍会出现 您可以在此http://www.youtube.com/watch?v=nVVgmeJEnnY中查看我的问题的更多详细信息 ViewController.m #import "Menu 我有一个UIVIEwController然后当我长按到self.vIEw它会推出一个d出窗口(MenuVIEwController).但是当我尝试通过removeFromSupervIEw删除d出窗口时,它仍会出现

您可以在此http://www.youtube.com/watch?v=nVVgmeJEnnY中查看我的问题的更多详细信息

VIEwController.m

#import "MenuVIEwController.h"@interface VIEwController () {    MenuVIEwController *menu;}....- (voID)vIEwDIDLoad{    ....    [[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(albumbuttonpressed : ) name:@"albumbuttonpressed" object:nil];    ....}....-(voID)albumbuttonpressed : (NSNotification*) notification {    UIImagePickerController *photopicker = [[UIImagePickerController alloc] init];    photopicker.delegate = self;    photopicker.sourceType = UIImagePickerControllerSourceTypePhotolibrary;    [self presentModalVIEwController:photopicker animated:YES];}...-(voID)handleLongPress:(UILongPressGestureRecognizer*)recognizer {    menu = [[MenuVIEwController alloc] initWithNibname:@"MenuVIEwController" bundle:nil];    if (self.imageVIEw.image != nil) {        menu.imageAdded = YES;    }    [self.vIEw addSubvIEw:menu.vIEw];}

MenuVIEwController.m

-(IBAction)albumbuttonpressed:(ID)sender {    [self.vIEw removeFromSupervIEw];    [[NSNotificationCenter defaultCenter] postNotificationname:@"albumbuttonpressed" object:nil];}
解决方法 抛开我对不应用正确的视图控制器包含的保留,问题是你的handleLongPress将被多次调用不同的Recognizer.state值,一次作为UIGestureRecognizerStateBegan,再次作为UIGestureRecognizerStateEnded.你应该检查手势的状态,例如:

-(voID)handleLongPress:(UILongPressGestureRecognizer*)recognizer {    if (recognizer.state == UIGestureRecognizerStateEnded) {        menu = [[MenuVIEwController alloc] initWithNibname:@"MenuVIEwController" bundle:nil];        if (self.imageVIEw.image != nil) {            menu.imageAdded = YES;        }        [self.vIEw addSubvIEw:menu.vIEw];    }}

原答案:

我建议使用removeFromSupervIEw在你的代码中放置一个NSLog或断点,看看你是否还得到那段代码.

这里有一些明显的问题.具体来说,您没有正确添加在handleLongPress中添加与MenuVIEwController关联的视图.如果你想要一个带有它自己的控制器的子视图,你必须使用包含(这只适用于iOS 5及更高版本).在收容中,你有像addChildViewController等关键方法.请参阅VIEw Controller编程指南中的Creating Custom Container View Controllers或参见WWDC 2011 – Implementing UIViewController Containment.而且,除此之外,你还要保留对MenuVIEwController的强引用,所以即使你成功删除它也是如此看,你要泄漏控制器.

花一点时间浏览收容文档/视频,我想你会想重新审视你如何展示你的菜单.这是一个密集的阅读,但值得真正理解.遏制是强大的,但必须正确.

总结

以上是内存溢出为你收集整理的ios – UIViewController removeFromSuperview错误全部内容,希望文章能够帮你解决ios – UIViewController removeFromSuperview错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1053895.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存