屏幕的某些部分在SWIFT中无法点击

时间:2015-01-08 04:23:41

标签: ios cocoa-touch swift

我的视图控制器(横向模式)下有一个嵌套的UIview,它包含2个按钮。 第一个按钮位于屏幕左侧,第二个按钮位于最右侧。我只是想知道为什么只有1/4部分的第二个按钮正常工作。我在0轴上重新安排了这个按钮,效果很好。

我认为我在uiview上传递的框架有问题。 请看我的代码。

导入UIKit

类ViewController:UIViewController {

var screenHolder:ScreenHolder?
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    ProjectData.currentFrame = self.view.frame
    screenHolder = ScreenHolder(frame: ProjectData.currentFrame)
    self.view.addSubview(screenHolder!)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

2 个答案:

答案 0 :(得分:0)

此类问题的常见原因是子视图完全或部分超出其超级视图的范围。当发生这种情况时,子视图仍然可见,但它变得无法访问。这是因为命中测试的工作方式 - 它从超视图向下传播,因此不会看到超级视图外部的点击,因此不会针对任何子视图进行测试。

所以,在这种情况下,你说:

  

我的视图控制器(横向模式)下的嵌套UIview,它包含2个按钮

其中一个按钮(子视图)位于嵌套的UIView(超级视图)之外。

检测/调试此类情况的最佳方法是将超级视图的clipsToBounds设置为true。这样,如果子视图完全或部分位于其外部,您将能够看到它,因此您将了解发生了什么,并且您不会被子视图的可见性误导。

答案 1 :(得分:0)

以下是那些遇到同样问题的人的解决方案:)

导入UIKit

类ViewController:UIViewController {

var screenHolder:ScreenHolder?
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

}

override func viewDidAppear(animated: Bool) {
    println("bounds \(view.bounds)")
    ProjectData.currentFrame = self.view.bounds


    screenHolder = ScreenHolder(frame: ProjectData.currentFrame)
    self.view.addSubview(screenHolder!)
    screenHolder?.clipsToBounds = true
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}