【问题标题】:Why does InAppSettingsKit override my TabBarItemTitle?为什么 InAppSettingsKit 会覆盖我的 TabBarItemTitle?
【发布时间】:2021-04-13 15:30:21
【问题描述】:

我在我的 iOS 应用中使用 InAppSettingsKit pod,在没有情节提要的情况下开发。 我有一个 MainTabBarController 来初始化我的 ViewControllers。一切正常,但是当我在模拟器(电话语言为英语)或我的物理设备(电话语言为德语)上启动应用程序时,我在这两种情况下都有问题。 应用程序启动,显示第一个 VC。当我点击最后一个名为“Einstellungen”的 TabBarItem 时,它会自动重命名为“设置”。我的 NavigationBar 标题也从“Einstellungen”更改为“设置”。我尝试了几件事,但我不明白有什么问题。 在 InAppSettingsKit 中是否有任何常量我必须更改,所以我的 VC 没有被重命名?

感谢您的帮助!

import UIKit
import FirebaseAuth

class MainTabBarController: UITabBarController, UITabBarControllerDelegate {

//MARK: - View Life Cycle

override func viewDidLoad() {
    super.viewDidLoad()
    
    delegate = self
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    setupViews()
}

//MARK: - Functions

private func setupViews() {
    guard let user = Auth.auth().currentUser else { return }
    
    //First ViewController
    let firstVC = UINavigationController(rootViewController: VicinityViewController(currentUser: user))
    firstVC.navigationBar.tintColor = .mainBlue
    firstVC.navigationBar.prefersLargeTitles = true
    firstVC.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.mainBlue]
    firstVC.navigationBar.largeTitleTextAttributes = firstVC.navigationBar.titleTextAttributes
    let firstVCItem = UITabBarItem(title: "Beispiel1", image: UIImage(systemName: "circle.grid.hex"), selectedImage: UIImage(systemName: "circle.grid.hex.fill"))
    firstVC.tabBarItem = firstVCItem
    
    //Second ViewController
    let secondVC = ChatsViewController()
    let secondVCItem = UITabBarItem(title: "Beispiel2", image: UIImage(systemName: "camera"), selectedImage: UIImage(systemName: "camera.fill"))
    secondVC.tabBarItem = secondVCItem
    
    //Third ViewController
    let thirdVC = UINavigationController(rootViewController: SettingsViewController())
    thirdVC.navigationBar.prefersLargeTitles = true
    let thirdVCItem = UITabBarItem(title: "Einstellungen", image: UIImage(systemName: "gear"), selectedImage: UIImage(systemName: "gear.fill"))
    thirdVC.tabBarItem = thirdVCItem
    
    //Array of the controllers, displayed by the TabBarController
    let controllers = [firstVC, secondVC, thirdVC]
    self.viewControllers = controllers
}

//MARK: - Delegate

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
    print("Should select ViewController: \(viewController.title ?? "")?")
    return true;
   }
}

我的 SettingsViewController:

import UIKit
import InAppSettingsKit
import FirebaseAuth

enum SpecifierKeys: String {
case logout = "logout_preference"
}

class SettingsViewController: IASKAppSettingsViewController {

//MARK: - View Life Cycle

override func viewDidLoad() {
    super.viewDidLoad()
    
    setupViews()
    updateHiddenKeys()
    delegate = self

    NotificationCenter.default.addObserver(self, selector: #selector(settingDidChange(notification:)), name: Notification.Name.IASKSettingChanged, object: nil)
}
    
//MARK: - Functions

private func setupViews() {
    self.navigationItem.rightBarButtonItem = nil
}
        
@objc func settingDidChange(notification: Notification?) {
    updateHiddenKeys()
}

func updateHiddenKeys() {
    print(UserDefaults.standard.object(forKey: "name_preference") ?? "There is no value")
  }
}

extension SettingsViewController: IASKSettingsDelegate {
    
func settingsViewControllerDidEnd(_ settingsViewController: IASKAppSettingsViewController) {
    print("SettingsViewController did end")
}

func settingsViewController(_ settingsViewController: IASKAppSettingsViewController, buttonTappedFor specifier: IASKSpecifier) {
    guard let _ = specifier.key else { return }
    let Specifier: SpecifierKeys = specifier.key.map { SpecifierKeys(rawValue: $0) }!!
    switch Specifier {
    case .logout:
        print("Ausloggen gedrückt")
        Utilities.logout()
    }
  }
}

【问题讨论】:

    标签: swift cocoapods programmatically-created inappsettingskit


    【解决方案1】:

    您似乎没有设置thirdVCtitle。在这种情况下(如果titlenil),IASK 会将其设置为NSLocalizedString(@"Settings", @"")

    所以要么设置thirdVC.title,要么将“设置”添加到您的 Localizable.strings 文件中。

    【讨论】:

    • 非常感谢您的完美回答。在我的 TabBarController 中设置标题是不够的。现在我也在我的 SettingsVC 中设置标题,例如: class SettingsViewController: IASKAppSettingsViewController { init() { super.init(style: .grouped) title = "Einstellungen" } required init?(coder: NSCoder) { fatalError("init( coder:) 尚未实现") } }
    猜你喜欢
    • 2012-10-15
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多