在 Swift 中单击 NSObject 内部的 tableView 中的项目时,如何在 NSObject 类中的 UIViewController 上的 UIView 之间正确切换?

Posted

技术标签:

【中文标题】在 Swift 中单击 NSObject 内部的 tableView 中的项目时,如何在 NSObject 类中的 UIViewController 上的 UIView 之间正确切换?【英文标题】:How to switch properly between UIViews or UIViewController inside NSObject Class when clicked the item in tableView inside of NSObject in Swift? 【发布时间】:2021-03-10 02:46:22 【问题描述】:

我想要的是,我有 NSObject MenuView,其中包含 tableView,当我单击其中一个单元格时,它应该删除另一个控制器上的当前 UIViewController 或 UIView。我在 NSObject didSelectItem 方法中使用了 MainPageController 的共享实例,通过使用 view.willRemoveSubviews(myCurrentView) 和 addSubView(newView) 将 MainPageController 上的当前视图替换为新视图,但它甚至没有崩溃或错误。请问有人可以帮我吗?我卡了很久...

这是我如何做到的信息。

inside of NSObject class's didSelectItem方法

    let view = UIView()
    view.backgroundColor = .red
    MainPageController.shared.addCustomSubView(View: view)

这里是我如何定义它in MainPageController

 func addCustomSubView(View: UIView) 
    view.willRemoveSubview(inOutView)
    view.addSubview(View)
    View.anchor(top: headerLine.bottomAnchor, leading: view.leadingAnchor, bottom: footerLine.topAnchor, trailing: view.trailingAnchor, padding: .init(), size: CGSize(width: 0, height: 0))

inOutView 也是我另一个控制器的视图,我将其添加为当前MainPageController 的子视图

所以我想用我的新 View 替换 inOutView 来自 didSelectItem 内的 NSObject

【问题讨论】:

你有没有使用委托方法调用函数移除视图? 不,我只是使用 MainPageControoler 的共享单例并从 NSObject 类调用其中的方法 【参考方案1】:

MainPageController:

@objc fileprivate func handleMenuButton() 
    menuLauncher.showSettings()
    menuLauncher.mainPageController = self


func showController() 
    let dummyController = UIViewController()
    dummyController.view.backgroundColor = .red
    addChild(dummyController)
    view.addSubview(dummyController.view)
    dummyController.view.anchor(top: headerLine.bottomAnchor, leading: view.leadingAnchor, bottom: footerLine.topAnchor, trailing: view.trailingAnchor, padding: .init(), size: CGSize(width: 0, height: 0))
    dummyController.didMove(toParent: self)


并在 NSObject 类和 didSelectItemAtIndexPath 内部声明 var mainPageController: MainPageController 这段代码:

 self.mainPageController?.showController()

通过这样做,我通过使用 NSObject 在 vi​​ewController 内部的 uiviews 之间实现了切换。

【讨论】:

以上是关于在 Swift 中单击 NSObject 内部的 tableView 中的项目时,如何在 NSObject 类中的 UIViewController 上的 UIView 之间正确切换?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NSObject 类中添加动态行为:Swift

Swift 3 中未调用 ViewForAnnotation

无法在目标 C 中调用 swift 函数。获取 NSObject 的错误接口声明

Swift:如何附加到 NSObject 数组?

如何在 Swift 中检索 NSURLRequest 的 HTTPBody 参数到 Dictionary: [NSObject: AnyObject]

Swift3:类型“NSObject”不符合协议“URLAuthenticationChallengeSender”