SubView层次结构不起作用(SubView隐藏在另一个下面)

时间:2014-06-12 12:16:51

标签: iphone objective-c uiimageview uibutton xcode5

我在Xcode中设计我的UI时遇到了问题。

我以编程方式创建(按下按钮时)UIImageView(黑色,透明叠加),UITextView(可编辑)和UIButton以清除这两个以前的UISubviews。

这个问题都出现在模拟器和我的iPhone上。

这是我的代码

- (IBAction)openCommentTextView:(id)sender {
    doneButton = [[UIButton alloc] initWithFrame:CGRectMake(20, 40, 60, 35)];
    doneButton.alpha = 0.0;
    doneButton.layer.cornerRadius = 7;
    doneButton.layer.borderColor = [[UIColor colorWithWhite:1.0 alpha:1.0] CGColor];
    doneButton.layer.borderWidth = 3;
    [doneButton setTitle:@"Done" forState:UIControlStateNormal];
    [doneButton setTitleColor:[UIColor colorWithWhite:1.0 alpha:1.0] forState:UIControlStateNormal];
    doneButton.titleLabel.font = [UIFont fontWithName:@"AvenirNext-Regular" size:15];
    [doneButton addTarget:self action:@selector(finishEditing:) forControlEvents:UIControlEventTouchUpInside];


    commentTextView = [[UITextView alloc] initWithFrame:CGRectMake(20, 90, 280, 230)];
    [commentTextView becomeFirstResponder];
    commentTextView.alpha = 0.0;
    if ([commentsTextViewViewer.text  isEqual: @"Comment..."]) {
        commentsTextViewViewer.text = @"";
    } else {
        commentTextView.text = commentsTextViewViewer.text;
    }
    commentTextView.keyboardAppearance = UIKeyboardAppearanceDark;
    commentTextView.layer.cornerRadius = 7;
    commentTextView.font = [UIFont fontWithName:@"GillSans" size:20];
    commentTextView.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.4];

    backgroundOverlay = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 330, 568)];
    backgroundOverlay.backgroundColor = [UIColor colorWithWhite:0.0 alpha:1.0];
    backgroundOverlay.alpha = 0.0;


    [self.view insertSubview:doneButton atIndex:11];
    [self.view insertSubview:commentTextView atIndex:10];
    [self.view insertSubview:backgroundOverlay atIndex:9];


    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    commentTextView.alpha = 1.0;
    doneButton.alpha = 1.0;
    [UIView commitAnimations];

    [UIView setAnimationDuration:0.3];
    backgroundOverlay.alpha = 1.0;
    [UIView commitAnimations];

}

然而,不知何故,UIButton(doneButton)和UITextView(commentTextView)位于UIImageView(黑色叠加层)之下。 UIButton和UITextView都响应。 (我将UIImageView(黑色叠加)alpha设置为1.0,并且UIButton和UITextView没有出现,尽管两者都有回应)

结果就像this一样(抱歉,我无法将图片直接包含在这里......我没有足够的声誉)

但是当我复制这段代码并粘贴到一个新的单视图应用程序时,它完全按照我的意愿工作。 (like this)

我真的不知道为什么会发生这种情况......我已经在网上搜索过但没有成功。

这与XCode或我的iPhone本身有关吗?

如果有人可以帮我解决这个问题,我会非常高兴。

谢谢。

1 个答案:

答案 0 :(得分:1)

可能会有所帮助的一些事情。除了索引atIndex:之外,我在0视图插入方法方面从来没有太多运气。尝试使用相对位置,因为您知道按钮和textview需要在背景覆盖之上。

[self.view addSubview:backgroundOverlay];
[self.view insertSubview:doneButton aboveSubview:backgroundOverlay];
[self.view insertSubview:commentTextView aboveSubview:backgroundOverlay];

此外,在动画第二位代码之前,您需要再次调用[UIView beginAnimations:nil context:nil];。或者,如果您定位iOS 4或更高版本,请使用推荐的UIView animation blocks