我有两个viewControllers(AviewController& BviewController)连接而不使用segue。 在AviewController中,我有一个UIScrollview。
我要做的是从BviewController调用一个函数来禁用AviewController中的scrollView(AviewController.scrollView.scrollEnabled = false)
如果不使用segue,我怎么能这样做?
BviewController:
var AV = AviewController ()
func disable_AscrollView (){
AviewController.scrollView.scrollEnabled = false
}
答案 0 :(得分:0)
嗯,您描述的代码不起作用,因为AV
与屏幕上显示的AviewController
不是AviewController
的实例。
有几个选项可以获得正确的实例,这取决于哪个是最好的情况。
如果您确定整个应用中只有一个(这似乎与Swift不兼容,请参阅注释。)static var sharedInstance: AviewController
,则可以声明self
,并将此变量设置为viewDidLoad
AviewController.sharedInstance
功能。现在,从应用中的无处不在,您可以将其称为disableScrollView
并调用其功能,例如自定义AviewController
函数。
如果window
在视图层次结构中有固定的位置,您可以通过应用程序代理的UIApplication.sharedApplication().delegate.window.rootViewController
属性找到它,例如
UINavigationController
根视图控制器可能是NSNotificationCenter
,在这种情况下你必须深入挖掘。
使用viewDidLoad
。在AviewController
的{{1}}中,注册通知:
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "disableScrollView:",
name: "DisableScrollView",
object: nil)
实施disableScrollView
功能(使用@objc
将其用作选择器):
@objc func disableScrollView(notification: NSNotification) {
// do something
}
当需要禁用滚动视图时,您只需调用
即可NSNotificationCenter.defaultCenter().postNotificationName(
"DisableScrollView", object: nil)
来自BviewController
。
答案 1 :(得分:0)
如果你的AViewController只是init,你可以在init和push / present方法之间修改它的属性。
如果AViewController已经被推送/呈现但不在视图控制器层的顶部(如在AViewController中推送BViewController),您可以尝试委托或通知。
将BViewController的委托设置为AViewController,您可以在AViewController实现的BViewController中使用self.delegate?.disableScrollInAViewController()
。
或者只是在AViewController中注册通知,并在BViewController中发布通知。