【问题标题】:Title incorrectly in UINavigationControllerUINavigationController 中的标题不正确
【发布时间】:2021-08-29 07:36:01
【问题描述】:

从按钮转到主屏幕后,我正在尝试所有方法来更改标题。主屏幕显示我,并且标题不想以任何方式更改。我希望标题显示为“Главная”。我查看了所有的 YouTube,从 github 下载了项目,但我找不到解决方案

主控制器:

protocol HomeViewControllerDelegate: AnyObject {
func didTapButtonMenu()
}

class HomeViewController: UIViewController {
weak var delegate: HomeViewControllerDelegate?
var primer = UILabel()


override func viewDidLoad() {
    super.viewDidLoad()
    primer.frame = CGRect(x: 100, y: 100, width: 100, height: 100)
    primer.backgroundColor = .red
    primer.text = ""
    view.addSubview(primer)


    view.backgroundColor = .white
    title = "Главная"

    navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(systemName: "list.dash")?.withRenderingMode(.alwaysOriginal), style: .done, target: self, action: #selector(barButtonTapped)) //убираем у иконки синий цвет с помощью withRenderingMode(.alwaysOriginal)
}

@objc func barButtonTapped() {
    delegate?.didTapButtonMenu()
}

容器控制器:

extension ContainerViewController: MenuViewControllerDelegate {
func didSelect(menuItem: MenuViewController.MenuOptions) {
    toggleMenu(compltion: nil)
    switch menuItem {
    case .home:
        self.resetToHome()
    case .calendarPay:
        break
    case .statistics:
        break
    case .addProperty:
        self.addPropertyFunc()
    case .settings:
        break
    }
}

func addPropertyFunc() {
    let vc = addPropertyVC
    homeVC.addChild(vc)
    homeVC.view.addSubview(vc.view)
    vc.view.frame = view.frame
    vc.didMove(toParent: homeVC)
    homeVC.title = vc.title
    
}

func resetToHome() {
    addPropertyVC.view.removeFromSuperview()
    addPropertyVC.didMove(toParent: nil)
    homeVC.title = "Главная"
    
}

//“3”控制器中的按钮

    func buttonNextFunc() {
    buttonNext.frame = CGRect(x: tableView.center.x - 75, y: tableView.bounds.height + 20, width: 150, height: 50)
    buttonNext.setTitle("Сохранить", for: .normal)
    buttonNext.backgroundColor = AllColors.surfColor()
    buttonNext.layer.cornerRadius = 10
    buttonNext.addTarget(nil, action: #selector(buttonNextTap), for: .touchUpInside)
    scrollView.addSubview(buttonNext)
}

@objc func buttonNextTap() {
    view.removeFromSuperview()
    didMove(toParent: nil)
    HomeViewController().title = "Главная"
}

【问题讨论】:

    标签: swift uinavigationcontroller navigationcontroller side-menu


    【解决方案1】:

    问题在于这个源代码。

    HomeViewController().title = "Главная"
    

    您正在创建 HomeViewController 的新实例并为其分配标题。一个您没有引用的新实例。

    根据您所拥有的实现您的要求的最佳方法是在您的HomeViewController 中实现所需的协议

    extension HomeViewController: HomeViewControllerDelegate {
        func didTapButtonMenu() {
            title = "Главная"
        }
    }
    

    将您的委托迁移到您的“3”视图控制器

    weak var delegate: HomeViewControllerDelegate?
    
    @objc func buttonNextTap() {
        view.removeFromSuperview()
        didMove(toParent: nil)
        delegate?.didTapButtonMenu()
    }
    

    在这种情况下,调用buttonNextTap 调用委托方法来更改HomeViewController didTapButtonMenu 以更改其标题。

    【讨论】:

    • 我按照你写的做了一切。但问题并没有解决。我将它输出到控制台 print(delegate?.didTapButtonMenu()) 并且 nil 返回
    • 您在创建“3”ViewController 时是否正确设置了委托?
    • 类 viewController3: UIViewController { 弱 var 委托: HomeViewControllerDelegate? var buttonNext = UIButton()}
    • 如何从 HomeViewController 导航到 viewController3?你什么时候实例化viewController3?您需要将委托设置为 self 到 HomeViewController。它应该看起来像这样 viewController3.delegate = self
    • 没有。原来我需要创建另一个协议?
    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多