无法从 sideMenu swift 中删除启动器

Posted

技术标签:

【中文标题】无法从 sideMenu swift 中删除启动器【英文标题】:Cannot Remove Launcher from sideMenu swift 【发布时间】:2018-06-25 04:15:06 【问题描述】:

我的应用看起来像这样

然后我点击看起来像这样的菜单,然后点击测试

然后点击按钮关闭

我正在寻找删除最后一个 uiview 的方法。请帮忙。

这是我的代码

import UIKit

class TabBarCtr: UITabBarController

    var sidebarView: SidebarView!
    var blackScreen: UIView!

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

        view.backgroundColor = .white

//这里有东西

        sidebarView = SidebarView(frame: CGRect(x: 0, y: 0, width: 0, height: self.view.frame.height))
        sidebarView.delegate = self
    sidebarView.layer.zPosition = 100
    self.view.isUserInteractionEnabled = true
    view.addSubview(sidebarView)

    blackScreen=UIView(frame: self.view.bounds)
    blackScreen.backgroundColor=UIColor(white: 0, alpha: 0.5)
    blackScreen.isHidden = true
    view.addSubview(blackScreen)
    blackScreen.layer.zPosition=99
    let tapGestRecognizer = UITapGestureRecognizer(target: self, action: #selector(blackScreenTapAction(sender:)))
    blackScreen.addGestureRecognizer(tapGestRecognizer)



override func viewDidLoad() 
    super.viewDidLoad()

    viewControllers = [
         CreateDumyNavControllerWithTitle(title: "Home", imageName: "bell")
    ]


private func CreateDumyNavControllerWithTitle(title:String, imageName:String, collection:Bool = false)-> UINavigationController 

    let viewCtr = HomeCtrViewController()
    viewCtr.navigationItem.leftBarButtonItem = setupLeftNavBarButtons()

    let navCtr = UINavigationController(rootViewController: viewCtr)
    navCtr.hidesBarsOnSwipe = true
    navCtr.tabBarItem.title = title
    navCtr.tabBarItem.image = UIImage(named: imageName)

    return navCtr


func setupLeftNavBarButtons()-> UIBarButtonItem

    let settingsImage = UIImage(named: "menu-2")?.withRenderingMode(.automatic)
    let settingBarButtonItem = UIBarButtonItem(image: settingsImage, style: .plain, target: self, action: #selector(btnMenuAction))

    return settingBarButtonItem


@objc func btnMenuAction() 

    blackScreen.isHidden = false
    UIView.animate(withDuration: 0.3, animations: 
        self.sidebarView.frame=CGRect(x: 0, y: 0, width: 250, height: self.sidebarView.frame.height)
    )  (complete) in
        self.blackScreen.frame=CGRect(x: self.sidebarView.frame.width, y: 0, width: self.view.frame.width-self.sidebarView.frame.width, height: self.view.bounds.height+100)
    


@objc func blackScreenTapAction(sender: UITapGestureRecognizer) 
    blackScreen.isHidden=true
    blackScreen.frame=self.view.bounds
    UIView.animate(withDuration: 0.3) 
        self.sidebarView.frame=CGRect(x: 0, y: 0, width: 0, height: self.sidebarView.frame.height)
        
    




// sideMenu


class SidebarView: UIView, UITableViewDelegate, UITableViewDataSource 

var titleArr = [String]()
weak var delegate: SidebarViewDelegate?

override init(frame: CGRect) 
    super.init(frame: frame)
    self.backgroundColor=UIColor(red: 54/255, green: 55/255, blue: 56/255, alpha: 1.0)
    self.clipsToBounds=true

    titleArr = ["Tam Tuyet", "test", "test1"]

    setupViews()

    myTableView.delegate=self
    myTableView.dataSource=self
    myTableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
    myTableView.tableFooterView=UIView()
    myTableView.separatorStyle = UITableViewCellSeparatorStyle.none
    myTableView.allowsSelection = true
    myTableView.bounces=false
    myTableView.showsVerticalScrollIndicator=false
    myTableView.backgroundColor = UIColor.clear





// 测试启动器

class TestLauncher: NSObject

let frame = UIApplication.shared.keyWindow?.frame

let testContainer: UIView = 
    let view = UIView()
        view.backgroundColor = UIColor.brown
        view.translatesAutoresizingMaskIntoConstraints = false
        view.layer.masksToBounds = true
        view.layer.zPosition = 1

    return view
()

let btnClose: UIButton = 
    let origImage = UIImage(named: "cancel")
    let tintedImage = origImage?.withRenderingMode(.alwaysTemplate)
    let btnClose = UIButton()
    btnClose.setImage(tintedImage, for: .normal)
    btnClose.tintColor = .white
    btnClose.addTarget(self, action:#selector(handleDismiss), for: UIControlEvents.touchUpInside)
    btnClose.frame = CGRect(x: 10, y: 30, width: 16, height: 16)

    return btnClose
()

func show() 
    testContainer.addSubview(btnClose)

    if let window = UIApplication.shared.keyWindow 
        window.addSubview(testContainer)

        setUpTestContainer()

        UIView.animate(withDuration: 0.5, delay:0, usingSpringWithDamping: 1, initialSpringVelocity:1, options: .curveEaseOut, animations: 

            self.testContainer.frame = CGRect(x: 0, y: 0, width: (self.frame?.width)!, height: (self.frame?.height)!)

        , completion: nil)
    



func setUpTestContainer()
    testContainer.frame = CGRect(x: 0, y: (self.frame?.height)!, width: (self.frame?.width)!, height: (self.frame?.height)!)


@objc func handleDismiss() 
    UIView.animate(withDuration: 0.2, animations: 
        if let window = UIApplication.shared.keyWindow
            self.testContainer.frame = CGRect(x: 0, y: window.frame.height, width:
                self.testContainer.frame.width, height: self.testContainer.frame.height)
        
    , completion: (finished:Bool) in
        self.testContainer.removeFromSuperview()
    )


override init() 
    super.init()



如何删除最后一个 uiview?我是新手。请帮我。提前致谢

【问题讨论】:

哪个视图是最后一个视图 TestLauncher 是最后一个视图。 github.com/TamTuyet/Problem 帮帮我。请 请让我检查一下 【参考方案1】:

这里需要修改

extension TabBarCtr: SidebarViewDelegate 
    func sidebarDidSelectRow(row: Row) 
        blackScreen.isHidden=true
        blackScreen.frame=self.view.bounds
        UIView.animate(withDuration: 0.3) 
            self.sidebarView.frame=CGRect(x: 0, y: 0, width: 0, height: self.sidebarView.frame.height)
        
        switch row 
        case .Name:
            print(" Name ")
        case .test:
            let test = TestLauncher()
            /// Comment below line
            test.show()

            /// Simply  Present it
            self.present(test, animated: true, completion: nil)
        case .test1:
            print("test1")
        case .none:
            break
        
    

现在在您的 TestLauncher

改变

class TestLauncher: NSObject

class TestLauncher: UIViewController

添加视图生命周期并保留您的动画

override func viewDidAppear(_ animated: Bool) 
    self.view.backgroundColor = .white
    self.testContainer.frame = CGRect(x: 0, y: self.view.frame.size.height, width: self.view.frame.size.width, height: self.view.frame.size.height)
    self.view.addSubview(self.testContainer)
    self.testContainer.addSubview(self.btnClose)
    UIView.animate(withDuration: 0.5, delay:0, usingSpringWithDamping: 1, initialSpringVelocity:1, options: .curveEaseOut, animations: 
        self.testContainer.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height)

    , completion: nil)

按钮操作

@objc func handleDismiss1(_ sender: UIButton) 
    self.dismiss(animated: true, completion: nil)

【讨论】:

非常感谢。爱你。

以上是关于无法从 sideMenu swift 中删除启动器的主要内容,如果未能解决你的问题,请参考以下文章

React Native Navigation v2 sideMenu 无法导航到屏幕

Swift 3.0 无法从 UITableView 中删除一行

无法在 IOS Swift 中使用委托方法关闭侧边菜单

无法从swift ios中的一段tableview中删除单元格

Sidemenu 折叠无法使用 Angular 模块

Swift - 启动屏幕后游戏崩溃并且无法转换到 GameScene NSException 错误