SWIFT:无法点击子视图

时间:2016-02-19 23:46:28

标签: swift uiviewcontroller addsubview

我创建了新的子视图

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    controller = storyboard.instantiateViewControllerWithIdentifier("menu") as! MenuViewController
    controller.view.frame = CGRectMake(0, -150, self.view.frame.size.width, 150);
    mainView.addSubview(controller.view)
    controller.view.layer.zPosition = 1
    controller.viewDidLoad()

然后我在viewController上添加按钮

但我无法点击按钮......

我可以选择我的新控制器下面的文字(我添加照片)

enter image description here

1 个答案:

答案 0 :(得分:0)

您的代码几乎没有问题。

首先,根据代码范围的限制,您无需知道,您无需将图层的addSubview属性设置为默认值零以外的任何值。使用controller.view.frame = CGRectMake(0, -150, self.view.frame.size.width, 150); ,您添加的视图会自动添加到所有当前子视图的顶部。

其次,基本上以编程方式创建框架没有任何问题,但是这往往会导致屏幕尺寸不同的设备出现问题。此外,当您将视图的宽度设置为等于另一个视图的宽度时,我建议使用自动布局,如果更改宽度将自动更新宽度。它还允许您跨所有设备屏幕尺寸/大小类创建响应式界面。

controller.viewDidLoad()

第三,没有必要手动触发y,因为一旦设置了帧,它就会被自动调用。

第四,(!)您将视图的框架设置为隐藏在屏幕顶部。我不确定这是否是正确的功能,但是想确保您知道通过将视图的controller原点设置为等于框架的原点,视图的底部将对齐超级视图的顶部。

容器视图控制器是包含其他视图控制器的视图控制器,允许您创建更多模块化代码,并将视图分离到托管视图控制器中。应该使用这种模式。

有关详细信息,请参阅https://www.objc.io/issues/1-view-controllers/containment-view-controller/

在下面的代码中,我还会检查MenuViewController变量是否为nil,这可以防止在您尝试强制打开控制器并且它不是类let storyboard = UIStoryboard(name: "Main", bundle: nil) if let controller = storyboard.instantiateViewControllerWithIdentifier("menu") as? MenuViewController { controller.view.frame = CGRectMake(0, -150, self.view.frame.size.width, 150); // Frame may need to be modified to be made visible ^ addChildViewController(controller) controller.willMoveToParentViewController(self) mainView.addSubview(controller.view) controller.widMoveToParentViewController(self) } 时发生崩溃。可以理解,这有点迂腐,因为您可能确定实例化的视图控制器是正确的,但是安全总是比抱歉更好。

-- Disable Index

ALTER INDEX [IXYourIndex] ON YourTable DISABLE
GO

-- Insert Data

-- Enable Index

ALTER INDEX [IXYourIndex] ON YourTable REBUILD
GO