Skip to content

Commit dd59096

Browse files
committed
增加用于控制搜索框字体的配置开关 SearchBarFont
1 parent fc0f25c commit dd59096

File tree

5 files changed

+73
-36
lines changed

5 files changed

+73
-36
lines changed

QMUIKit/UICore/QMUIConfiguration.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ NS_ASSUME_NONNULL_BEGIN
121121
@property(nonatomic, strong, nullable) UIColor *searchBarTintColor;
122122
@property(nonatomic, strong, nullable) UIColor *searchBarTextColor;
123123
@property(nonatomic, strong, nullable) UIColor *searchBarPlaceholderColor;
124+
@property(nonatomic, strong, nullable) UIFont *searchBarFont;
124125
/// 搜索框放大镜icon的图片,大小必须为13x13pt,否则会失真(系统的限制)
125126
@property(nonatomic, strong, nullable) UIImage *searchBarSearchIconImage;
126127
@property(nonatomic, strong, nullable) UIImage *searchBarClearIconImage;
@@ -178,8 +179,7 @@ NS_ASSUME_NONNULL_BEGIN
178179
@property(nonatomic, assign) BOOL statusbarStyleLightInitially;
179180
@property(nonatomic, assign) BOOL needsBackBarButtonItemTitle;
180181
@property(nonatomic, assign) BOOL hidesBottomBarWhenPushedInitially;
181-
@property(nonatomic, assign) BOOL navigationBarHiddenStateUsable;
182-
@property(nonatomic, assign) QMUINavigationBarHiddenState navigationBarHiddenStateInitially;
182+
@property(nonatomic, assign) BOOL navigationBarHiddenInitially;
183183

184184
NS_ASSUME_NONNULL_END
185185

QMUIKit/UICore/QMUIConfiguration.m

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,17 @@ + (instancetype)sharedInstance {
2121
static QMUIConfiguration *sharedInstance = nil;
2222

2323
// 检查是否有在某些类的 +load 方法里调用 QMUICMI,因为在 [QMUIConfiguration init] 方法里会操作到 UI 的东西,例如 [UINavigationBar appearance] xxx 等,这些操作不能太早(+load 里就太早了)执行,否则会 crash,所以加这个检测
24-
#ifdef DEBUG
25-
BOOL shouldCheckCallStack = NO;
26-
if (shouldCheckCallStack) {
27-
for (NSString *symbol in [NSThread callStackSymbols]) {
28-
if ([symbol qmui_includesString:@" load]"]) {
29-
NSAssert(NO, @"不应该在 + load 方法里调用 %s", __func__);
30-
return nil;
31-
}
32-
}
33-
}
34-
#endif
24+
//#ifdef DEBUG
25+
// BOOL shouldCheckCallStack = NO;
26+
// if (shouldCheckCallStack) {
27+
// for (NSString *symbol in [NSThread callStackSymbols]) {
28+
// if ([symbol qmui_includesString:@" load]"]) {
29+
// NSAssert(NO, @"不应该在 + load 方法里调用 %s", __func__);
30+
// return nil;
31+
// }
32+
// }
33+
// }
34+
//#endif
3535

3636
dispatch_once(&pred, ^{
3737
sharedInstance = [[QMUIConfiguration alloc] init];
@@ -157,6 +157,7 @@ - (void)initDefaultConfiguration {
157157
self.searchBarTintColor = nil;
158158
self.searchBarTextColor = nil;
159159
self.searchBarPlaceholderColor = self.placeholderColor;
160+
self.searchBarFont = nil;
160161
self.searchBarSearchIconImage = nil;
161162
self.searchBarClearIconImage = nil;
162163
self.searchBarTextFieldCornerRadius = 2.0;
@@ -212,8 +213,7 @@ - (void)initDefaultConfiguration {
212213
self.statusbarStyleLightInitially = NO;
213214
self.needsBackBarButtonItemTitle = NO;
214215
self.hidesBottomBarWhenPushedInitially = NO;
215-
self.navigationBarHiddenStateUsable = NO;
216-
self.navigationBarHiddenStateInitially = QMUINavigationBarHiddenStateShowWithAnimated;
216+
self.navigationBarHiddenInitially = NO;
217217
}
218218

219219
- (void)setNavBarTintColor:(UIColor *)navBarTintColor {

QMUIKit/UICore/QMUIConfigurationMacros.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@
135135
#define SearchBarTintColor [QMUICMI searchBarTintColor]
136136
#define SearchBarTextColor [QMUICMI searchBarTextColor]
137137
#define SearchBarPlaceholderColor [QMUICMI searchBarPlaceholderColor]
138+
#define SearchBarFont [QMUICMI searchBarFont]
138139
#define SearchBarSearchIconImage [QMUICMI searchBarSearchIconImage]
139140
#define SearchBarClearIconImage [QMUICMI searchBarClearIconImage]
140141
#define SearchBarTextFieldCornerRadius [QMUICMI searchBarTextFieldCornerRadius]
@@ -192,6 +193,5 @@
192193
#define StatusbarStyleLightInitially [QMUICMI statusbarStyleLightInitially] // 默认的状态栏内容是否使用白色,默认为NO,也即黑色
193194
#define NeedsBackBarButtonItemTitle [QMUICMI needsBackBarButtonItemTitle] // 全局是否需要返回按钮的title,不需要则只显示一个返回image
194195
#define HidesBottomBarWhenPushedInitially [QMUICMI hidesBottomBarWhenPushedInitially] // QMUICommonViewController.hidesBottomBarWhenPushed 的初始值,默认为 NO,以保持与系统默认值一致,但通常建议改为 YES,因为一般只有 tabBar 首页那几个界面要求为 NO
195-
#define NavigationBarHiddenStateUsable [QMUICMI navigationBarHiddenStateUsable] // NavigationBarHiddenStateUsable : 是否使用 navigationBarHiddenState 来管理导航栏的显示隐藏的初始值,默认为NO
196-
#define NavigationBarHiddenStateInitially [QMUICMI navigationBarHiddenStateInitially] // NavigationBarHiddenStateInitially : preferredNavigationBarHiddenState 的初始值,默认为QMUINavigationBarHiddenStateShowWithAnimated
196+
#define NavigationBarHiddenInitially [QMUICMI navigationBarHiddenInitially] // NavigationBarHiddenInitially : preferredNavigationBarHidden 的初始值,默认为NO
197197

QMUIKit/UIKitExtensions/UISearchBar+QMUI.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313

1414
@property(nonatomic, strong) UIColor *qmui_placeholderColor;
1515
@property(nonatomic, strong) UIColor *qmui_textColor;
16+
@property(nonatomic, strong) UIFont *qmui_font;
1617

1718
/// 获取 searchBar 内的输入框
18-
- (UITextField *)textField;
19+
@property(nonatomic, weak, readonly) UITextField *qmui_textField;
1920

2021
- (void)qmui_styledAsQMUISearchBar;
2122

QMUIKit/UIKitExtensions/UISearchBar+QMUI.m

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,39 +19,80 @@ + (void)load {
1919
});
2020
}
2121

22+
- (void)qmui_setPlaceholder:(NSString *)placeholder {
23+
[self qmui_setPlaceholder:placeholder];
24+
if (self.qmui_placeholderColor || self.qmui_font) {
25+
NSMutableDictionary<NSString *, id> *attributes = [[NSMutableDictionary alloc] init];
26+
if (self.qmui_placeholderColor) {
27+
attributes[NSForegroundColorAttributeName] = self.qmui_placeholderColor;
28+
}
29+
if (self.qmui_font) {
30+
attributes[NSFontAttributeName] = self.qmui_font;
31+
}
32+
self.qmui_textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholder attributes:attributes];
33+
}
34+
}
35+
2236
static char kAssociatedObjectKey_PlaceholderColor;
2337
- (void)setQmui_placeholderColor:(UIColor *)qmui_placeholderColor {
2438
objc_setAssociatedObject(self, &kAssociatedObjectKey_PlaceholderColor, qmui_placeholderColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
25-
if (self.placeholder && qmui_placeholderColor) {
26-
self.textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:self.placeholder attributes:@{NSForegroundColorAttributeName: qmui_placeholderColor}];
39+
if (self.placeholder) {
40+
// 触发 setPlaceholder 里更新 placeholder 样式的逻辑
41+
self.placeholder = self.placeholder;
2742
}
2843
}
2944

3045
- (UIColor *)qmui_placeholderColor {
3146
return (UIColor *)objc_getAssociatedObject(self, &kAssociatedObjectKey_PlaceholderColor);
3247
}
3348

34-
- (void)qmui_setPlaceholder:(NSString *)placeholder {
35-
[self qmui_setPlaceholder:placeholder];
36-
// placeholder的颜色
37-
if (self.qmui_placeholderColor) {
38-
self.textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholder attributes:@{NSForegroundColorAttributeName: self.qmui_placeholderColor}];
39-
}
40-
}
41-
4249
static char kAssociatedObjectKey_TextColor;
4350
- (void)setQmui_textColor:(UIColor *)qmui_textColor {
4451
objc_setAssociatedObject(self, &kAssociatedObjectKey_TextColor, qmui_textColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
45-
self.textField.textColor = qmui_textColor;
52+
self.qmui_textField.textColor = qmui_textColor;
4653
}
4754

4855
- (UIColor *)qmui_textColor {
4956
return (UIColor *)objc_getAssociatedObject(self, &kAssociatedObjectKey_TextColor);
5057
}
5158

59+
static char kAssociatedObjectKey_font;
60+
- (void)setQmui_font:(UIFont *)qmui_font {
61+
objc_setAssociatedObject(self, &kAssociatedObjectKey_font, qmui_font, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
62+
if (self.placeholder) {
63+
// 触发 setPlaceholder 里更新 placeholder 样式的逻辑
64+
self.placeholder = self.placeholder;
65+
}
66+
}
67+
68+
- (UIFont *)qmui_font {
69+
return (UIFont *)objc_getAssociatedObject(self, &kAssociatedObjectKey_font);
70+
}
71+
72+
- (UITextField *)qmui_textField {
73+
UITextField *textField = [self valueForKey:@"searchField"];
74+
return textField;
75+
}
76+
5277
- (void)qmui_styledAsQMUISearchBar {
53-
self.qmui_textColor = SearchBarTextColor;
54-
self.qmui_placeholderColor = SearchBarPlaceholderColor;
78+
// 搜索框的字号及 placeholder 的字号
79+
UIFont *font = SearchBarFont;
80+
if (font) {
81+
self.qmui_font = font;
82+
}
83+
84+
// 搜索框的文字颜色
85+
UIColor *textColor = SearchBarTextColor;
86+
if (textColor) {
87+
self.qmui_textColor = SearchBarTextColor;
88+
}
89+
90+
// placeholder 的文字颜色
91+
UIColor *placeholderColor = SearchBarPlaceholderColor;
92+
if (placeholderColor) {
93+
self.qmui_placeholderColor = SearchBarPlaceholderColor;
94+
}
95+
5596
self.placeholder = @"搜索";
5697
self.autocorrectionType = UITextAutocorrectionTypeNo;
5798
self.autocapitalizationType = UITextAutocapitalizationTypeNone;
@@ -90,9 +131,4 @@ - (void)qmui_styledAsQMUISearchBar {
90131
}
91132
}
92133

93-
- (UITextField *)textField {
94-
UITextField *textField = [self valueForKey:@"searchField"];
95-
return textField;
96-
}
97-
98134
@end

0 commit comments

Comments
 (0)