Closed MoLice closed 3 years ago
Bug 表现 在 QMUI 体系里总共有3种方式可以控制返回按钮的文字:
NeedsBackBarButtonItemTitle
-[QMUINavigationControllerAppearanceDelegate backBarButtonItemTitleWithPreviousViewController:]
UINavigationItem.backBarButtonItem
这3种方式的优先级目前比较混乱,导致某些场景需求无法实现:
全局默认不显示返回按钮文字,但某个界面的子界面强制要求显示返回按钮文字。
这种直观反应是将配置表的 NeedsBackBarButtonItemTitle 设为 NO,再设置指定界面的 backBarButtonItem,但会发现子界面依然没有返回按钮文字,因为在 push 界面时,为了应用 NeedsBackBarButtonItemTitle 配置项,QMUI 又会重新设置 backBarButtonItem 的值,导致覆盖了业务自己设置的值。
NO
backBarButtonItem
某个界面的子界面强制要求显示返回按钮文字,但其中某一个子界面又不希望显示返回按钮文字。
直观反应是给父界面设置 backBarButtonItem,不希望显示返回按钮文字的子界面则再实现 backBarButtonItemTitleWithPreviousViewController: 方法返回一个空字符串,这样后者可以在 push 的时候把 backBarButtonItem 重置为空。一般情况下没问题,但如果父界面的 backBarButtonItem 随时可能被设置(例如在某个 notification callback 里去设置),那么 backBarButtonItemTitleWithPreviousViewController: 的值又会被覆盖,于是子界面又看到返回按钮文字。
backBarButtonItemTitleWithPreviousViewController:
预期的表现
这3种方法,按照优先级从低到高排列应该是:NeedsBackBarButtonItemTitle < backBarButtonItem < backBarButtonItemTitleWithPreviousViewController:,优先级高的方式可以覆盖优先级低的方式,同时要保证不会因为时机问题而导致低优先级的方式覆盖了高优先级的方式。
其他信息
已发布 4.2.2 修复该问题。
Bug 表现 在 QMUI 体系里总共有3种方式可以控制返回按钮的文字:
NeedsBackBarButtonItemTitle
,可以全局屏蔽返回按钮的文字。-[QMUINavigationControllerAppearanceDelegate backBarButtonItemTitleWithPreviousViewController:]
方法可以控制当前界面的返回按钮文字。UINavigationItem.backBarButtonItem
,可以控制当前界面的下一个界面的返回按钮文字。这3种方式的优先级目前比较混乱,导致某些场景需求无法实现:
全局默认不显示返回按钮文字,但某个界面的子界面强制要求显示返回按钮文字。
这种直观反应是将配置表的
NeedsBackBarButtonItemTitle
设为NO
,再设置指定界面的backBarButtonItem
,但会发现子界面依然没有返回按钮文字,因为在 push 界面时,为了应用NeedsBackBarButtonItemTitle
配置项,QMUI 又会重新设置backBarButtonItem
的值,导致覆盖了业务自己设置的值。某个界面的子界面强制要求显示返回按钮文字,但其中某一个子界面又不希望显示返回按钮文字。
直观反应是给父界面设置
backBarButtonItem
,不希望显示返回按钮文字的子界面则再实现backBarButtonItemTitleWithPreviousViewController:
方法返回一个空字符串,这样后者可以在 push 的时候把backBarButtonItem
重置为空。一般情况下没问题,但如果父界面的backBarButtonItem
随时可能被设置(例如在某个 notification callback 里去设置),那么backBarButtonItemTitleWithPreviousViewController:
的值又会被覆盖,于是子界面又看到返回按钮文字。预期的表现
这3种方法,按照优先级从低到高排列应该是:
NeedsBackBarButtonItemTitle
<backBarButtonItem
<backBarButtonItemTitleWithPreviousViewController:
,优先级高的方式可以覆盖优先级低的方式,同时要保证不会因为时机问题而导致低优先级的方式覆盖了高优先级的方式。其他信息