返回VC时,UIButton不响应removeFromSuperView

时间:2013-03-27 20:52:52

标签: ios objective-c rotation uibutton uitabbarcontroller

我有一个UIButton,我以编程方式实现,因为只有在我旋转设备时才需要它。

当我旋转时按钮需要消失,当我去风景时出现。

只要我停留在同一个ViewController中,我就没有问题。无论如何我都可以旋转设备,按钮出现并按预期消失。 该应用程序是一个基于TabController的应用程序,当我转到另一个选项卡时,会发生相同的行为。

这就是问题 当我返回原始视图时,按钮出现,但之后永远不会消失。这几乎就像没有调用removeFromSuperView,但即使它被调用,按钮也不会被删除。

为什么会这样?

-(void)autoRotationDetection
{
    [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter]
     addObserver:self selector:@selector(orientationChanged:)
     name:UIDeviceOrientationDidChangeNotification
     object:[UIDevice currentDevice]];
}

- (void) orientationChanged:(NSNotification *)note
{
    UIDevice * device = note.object;
    switch(device.orientation)
    {
        case UIDeviceOrientationPortrait:
            /* start special animation */
            [_menuButton removeFromSuperview];
            break;

        case UIDeviceOrientationPortraitUpsideDown:
            /* start special animation */
            break;

        default:
            break;
    };
}

然后我打电话给

-(void)viewWillAppear:(BOOL)animated
{

    [self autoRotationDetection];
}

抱歉应该补充一下。

1 个答案:

答案 0 :(得分:0)

当我忘记调用[super viewWillAppear]时,我已经看到了这种行为(在转到另一个标签并再次返回后表现不同)。尝试添加它,看看它是否修复了它。

编辑后:

我认为更简单的方法是在viewWillLayoutSubviews中查看视图的边界,每次旋转时调用该视图(有时也会调用,但是对于像这样的简单事情,那应该是'无所谓)。在这个例子中,我隐藏或显示而不是删除,但这个概念应该适用于两者。

-(void)viewWillLayoutSubviews {
    BOOL portrait = self.view.bounds.size.height > self.view.bounds.size.width;
    if (portrait) {
        self.button.hidden = YES;
    }else{
        self.button.hidden = NO;
    }
}

您可以通过跟踪上次调用此方法时肖像的值来提高效率,并且只有在肖像更改后才更改按钮的状态。