繁体   English   中英

removeFromSuperView在按钮上不起作用

[英]removeFromSuperView not working on button

我要折磨的另一个问题。 我已经以编程方式创建了一个UIButton。 唯一的目的是站在另一个按下按钮半秒钟的按钮之上。 底部按钮是图片,顶部按钮是垃圾桶。 您可以在这里看到我要执行的操作:我有一张照片,要删除它,您必须将其按下一会儿。

if (CGRectContainsPoint(self.capturedImageOneSmall.frame, tapAndHoldPoint)) {

                aboutToDeleteImageTrashCan = [[UIButton alloc] init];
                aboutToDeleteImageTrashCan.frame = self.capturedImageOneSmall.frame;
                [aboutToDeleteImageTrashCan setBackgroundImage:[UIImage imageNamed:@"LogoTrashcan"] forState:UIControlStateNormal];
                [aboutToDeleteImageTrashCan addTarget:self action:@selector(deleteImage:) forControlEvents:UIControlEventTouchUpInside];
                aboutToDeleteImageTrashCan.tag = 1;
                [self.scrollView addSubview:aboutToDeleteImageTrashCan];

当我调用删除两个按钮的方法时,只有图片消失了,垃圾桶仍留着,甚至仍然可以被点击。

- (void)deleteImage:(UIButton *)sender
{
    if (aboutToDeleteImageTrashCan.tag == 1) {
        [self.capturedImageOneSmall removeFromSuperview]; //this works!
        self.capturedImageOneSmall = nil;
        capturedImageOneData = nil;
    }
    [aboutToDeleteImageTrashCan performSelectorOnMainThread:@selector(removeFromSuperview) withObject:nil waitUntilDone:NO]; //this doesn't!
    aboutToDeleteImageTrashCan = nil;

你们有什么主意吗?

将语句放在包含“ performSelectorOnMainThread”调用的行的紧前面时,是否可以显示该语句的输出:

NSLog(aboutToDeleteImageTrashCan: %@, aboutToDeleteImageTrashCan);

是的,看到它们具有不同的内存地址吗? (0x15eb5e80和0x15eb7940)。 我怀疑您有一个来自接口生成器的对象,然后您创建了另一个标签并将其分配给aboutToDeleteImageTrashCan。 这样,您可能在同一位置上有两个标签,因此删除一个标签将是无懈可击的,因为另一个标签在其下方。 而且由于没有更多(直接)引用来自interface-builder的标签,因此很难使该标签消失。

因此,如果您忽略alloc / init行,我怀疑您的问题将得到解决。

为什么要调用performSelectorOnMainThread:withObject:waitUntilDone :? 这没有任何意义(至少在没有其他上下文的情况下)。 无论如何,您为waituntildone指定了NO,因此这意味着该工作计划在运行循环结束时完成,到那时您已经将aboutToDeleteImageTrashCan设置为nil。

如果由于某种原因您真的想使此removeFromSuperView发生在运行循环的末尾,只需将其分派到主队列即可:

dispatch_async(dispatch_get_main_queue(), ^{
    [aboutToDeleteImageTrashCan removeFromSuperview];
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM