VC ClassView标签页里不显示类信息或者显示不全解决

本文提供了解决Visual C++环境中ClassView标签页中类信息不显示或显示不全的方法,通过删除特定文件并重新打开工程即可解决。

环境:VC

问题:ClassView标签页里不显示类信息或者显示不全

解决:打开工程所在项目----->找到一个以.ncb结尾的文件,将其删除----->再次打开工程----->看到完整的类信息了----->解决。

注:

NCB是 “No Compile Browser”的缩写,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC开发环境自动生成。无编译浏览文件。当自动完成功能出问题时可以删除此文件。编译工程后会自动生成。

非常感谢你的澄清! 你说的是: > “是 `Controllers`,而是 `ViewControllers`” 所以我们现在的项目结构是这样的: ``` DeviceList/ ├── ViewControllers/ ← 主视图控制器放在这 ├── Views/ ← 所有自定义 UIView 子类 ├── Models/ ← 数据模型 ├── Extensions/ ← Swift 扩展 └── Protocols/ ← 协议定义 ``` 这个结构很常见,尤其是在 MVC 架构中。 现在你想把原本属于 `DeviceListMasterVC` 的一些 UI 控制逻辑拆出去,比如: - 导航栏按钮设置 - 标题 view 更新 - 状态栏样式 - 页面出现时的视觉调整 但你想新建太多文件夹,也想命名冲突或造成误解。 --- ## ✅ 正确答案:仍然建议命名为 ### `DeviceListPresentationController` 并放入 ### `ViewControllers/` 文件夹下 --- ## 🎯 为什么可以放在 `ViewControllers/`? 虽然 `ViewControllers/` 通常是放 `UIViewController` 子类的地方(如 `DeviceListMasterVC.swift`),但你可以这样理解它的职责范围: | 类型 | 是否适合放在这 | |------|----------------| | `DeviceListMasterVC` | ✅ 当然可以 —— 是主 VC | | `DeviceListChildViewControllerManager` | ✅ 可以 —— 管理子 VC 生命周期 | | `DeviceListAppearanceController` / `PresentationController` | ✅ 合理 —— 它“协助”主 VC 呈现界面 | 👉 **关键点**:这些类都和“页面呈现”强相关,属于 **UI 控制层的一部分**,所以放在 `ViewControllers/` 是合理的,会破坏架构一致性。 --- ## ✅ 推荐命名:`DeviceListPresentationController` ### 💬 命名理由: | 名称 | 说明 | |------|------| | `Presentation` | 强调它负责“页面如何被展示”——导航栏、标题、按钮显隐等 | | `Controller` | 表明它是协调者,是数据服务也是 view | | 叫 `Manager` | 避免泛化,暗示单例或局状态 | | 含 `View` | 避免与 `UIView` 混淆(像 `DeviceListViewHelper`) | --- ## ✅ 示例代码(完整) ```swift // File: DeviceList/ViewControllers/DeviceListPresentationController.swift import UIKit class DeviceListPresentationController { private weak var owner: DeviceListMasterVC? init(owner: DeviceListMasterVC) { self.owner = owner } /// 更新导航栏左右按钮(根据登录状态、设备类型等) func updateNavigationBarButtons() { guard let vc = owner else { return } var leftItems: [UIBarButtonItem] = [] var rightItems: [UIBarButtonItem] = [] // 左侧:返回 or 菜单 if vc.isFromSetting || vc.isFromLocalVMSLogin || vc.showLocalDeviceOnly { leftItems.append(vc.backBarButtonItem) } else { leftItems.append(vc.menuBarButtonItem) } // 右侧:搜索 + 更多 rightItems.append(vc.searchBarButtonItem) rightItems.append(vc.moreBarButtonItem) vc.navigationItem.leftBarButtonItems = leftItems vc.navigationItem.rightBarButtonItems = rightItems } /// 更新标题区域(支持 back label 或自定义 title) func updateTitleView() { guard let vc = owner else { return } if !vc.appContext.isLocalVMSLogin { vc.addTitleView() } else if !vc.isDeviceListOld && !vc.showLocalDeviceOnly { let titleLabel = UILabel() titleLabel.text = vc.appContext.isVmsLogin ? vc.appContext.accountInfo.currentVmsName : LocalizedString(key: accountMyVIGI) let titleItem = UIBarButtonItem(customView: titleLabel) vc.navigationItem.leftBarButtonItems = [titleItem] } } /// 更新本地设备计数标签 func updateLocalDeviceCountLabel() { guard let vc = owner else { return } vc.localDeviceCountLabel.text = String(format: LocalizedString(key: deviceListNumberOfDevices), vc.localDeviceCount) vc.LocalDeviceViewHeight.constant = 0 vc.localDeviceView.isHidden = true } } ``` --- ## 🔧 在主 VC 中使用方式变 ```swift // DeviceListMasterVC.swift private lazy var presentationController = DeviceListPresentationController(owner: self) func handleViewWillAppear() { updateTabNamesAfterRelogin() dataService.handleInitialSiteInfoRequest() dataService.handleVmsRefreshIfNeeded() presentationController.updateNavigationBarButtons() presentationController.updateTitleView() presentationController.updateLocalDeviceCountLabel() layoutHelper.applyScrollViewAndGestureLayout() childVCManager.refreshFirstChildViewController() stateManager.handleAppearanceState() callbackManager.registerCallbacks() } ``` --- ## 📁 最终文件结构清晰合理 ``` DeviceList/ ├── ViewControllers/ │ ├── DeviceListMasterVC.swift │ └── DeviceListPresentationController.swift ← 新增,语义明确 ├── Views/ │ ├── LocalDeviceHeaderView.swift │ └── ... ├── Models/ │ └── DeviceListModel.swift ├── Extensions/ │ └── UIViewController+Extensions.swift └── Protocols/ └── DeviceListDelegate.swift ``` ✅ 所有与“页面控制”相关的类都在 `ViewControllers/` 下 ✅ 没有引入新层级,保持简洁 ✅ 名称专业、无歧义、易维护 --- ## ✅ 总结:你应该这样做 | 决策 | 内容 | |------|------| | ❌ 要叫 | `DeviceListUIManager`, `DeviceListViewHelper`(太模糊) | | ✅ 应该叫 | `DeviceListPresentationController` | | ✅ 放在哪 | `ViewControllers/` 文件夹下 | | ✅ 职责 | 协助主 VC 处理“页面如何被呈现”的逻辑(非数据、非布局、非交互响应) | 这个名字既符合苹果开发术语习惯,又能准确传达其作用,完美融入你现有的工程结构。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值