无法将以编程方式创建的视图显示为最顶层的视图?

时间:2015-12-13 00:20:03

标签: ios swift

我有一个带有tableview的UIViewController(名为Friends),我希望在用户离线时在Controller的视图上方显示视图。这就是我创建视图的方式

class func showOffline(host: UIViewController) {

    // showOffline image
    var disconnectedImage = UIImage(named: "offlineIconGrey")
    disconnectedImage = disconnectedImage?.imageWithRenderingMode(.AlwaysOriginal)
    let imageView = UIImageView(image: disconnectedImage)
    imageView.center = CGPoint(x: host.view.center.x,
                               y: host.view.center.y - imageView.frame.height/2)

    // showOffline Label
    let Label = UILabel(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
    let labelText = "You appear to be offline \n Please connect to the internet"
    Label.center = CGPoint(x: host.view.center.x,
                           y: imageView.center.y + 3*imageView.frame.height/4)
    Label.numberOfLines = 0
    Label.text = labelText
    Label.textAlignment = .Center
    Label.font = UIFont(name: (Label.font?.fontName)!, size: 14.0)
    Label.sizeToFit()
    Label.textColor = UIColor.whiteColor()
    Label.lineBreakMode = .ByCharWrapping
    Label.frame.offsetInPlace(dx: -Label.frame.size.width/2, dy: 0)

    host.view.insertSubview(imageView, aboveSubview: host.view)
    host.view.insertSubview(Label, aboveSubview: host.view)

}

现在我的理解是,主机视图(host.view)应该是我的故事板上显示的最顶层视图;但是,当我像这样调用我的showOffline函数时

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    if !Reachability.isConnected() {
        state = .Offline

    } else {
        state = .Default
    }
}

离线状态调用,

General.showOffline(self)

喜欢这样

var state: State = .Default {
    didSet {
        switch (state) {
        case .Default:
            print("ViewMode = Default")
            //query = ParseHelper.allUsers(updateList)

        case .Search:
            let searchText = searchBar?.text ?? ""
            print(searchText)
            //query = ParseHelper.searchUsers(searchText, completionBlock:updateList)

        case .Offline:
            General.showOffline(self)
            searchBar.userInteractionEnabled = false
            query = nil
            users = [PFUser]() ?? []

            print("ViewMode = Offline")
        }
    }
}

除非我从show segue返回到视图控制器(Friends),否则视图不会显示为最顶层的视图。否则,导航到该视图控制器时不会显示标签?我错过了什么吗?我试图通过将视图放在tableview上面来解决问题,但在这种情况下,关闭视图居中的数学是关闭的,可能是因为我没有加载任何单元格而且我有一个页脚视图作为UIView。我也尝试将视图添加到tableview的页脚视图中,但这也没有用。我不想要的是将视图添加到导航控制器的视图中,因为我不想要这种行为,但如果我没有其他选择,我会这样做。

This is what I want

有人可以告诉我我做错了什么或者向我推荐可以帮助我解决问题的信息吗?谢谢!

2 个答案:

答案 0 :(得分:1)

host.view.insertSubview(imageView, aboveSubview: host.view)

无法工作。您将子视图添加到host.view。 “aboveSubview”必须是host.view的子视图。 g还有其他方法 添加子视图。

答案 1 :(得分:0)

当您致电insertSubview:aboveSubview:时,您作为第二个参数提供的视图必须是您要插入的视图的子视图。这里,它是相同的视图,所以很明显它赢了# 39;工作。

除非有其他视图应该保留在您要插入的视图之上,否则最简单的方法是使用addSubview:,这将使新视图成为目标视图的子视图中最顶层的视图。 / p>