百思不得姐知识点

百思不得姐知识点

tabBarItem字符属性

1
2
3
4
5
6
NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary]; 
normalAttrs[NSFontAttributeName] = [UIFont systemFontOfSize:14];
normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor];

[vc0.tabBarItem setTitleTextAttributes:normalAttrs forState:UIControlStateNormal];
[vc0.tabBarItem setTitleTextAttributes:selectedAttrs forState:UIControlStateSelected];

设置自定义tabBar控制器

1
self.window.rootViewController = [[XMGTabBarController alloc] init];

pch常见宏

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/***** 在#ifdef __OBJC__和#endif之间的内容, 只会拷贝到OC源代码文件中, 不会拷贝到其他语言的源代码文件中 *****/
#ifdef __OBJC__

/*** 日志 ***/
#ifdef DEBUG
#define XMGLog(...) NSLog(__VA_ARGS__)
#else
#define XMGLog(...)
#endif

/*** 颜色 ***/
#define XMGColorA(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:(a)/255.0]
#define XMGColor(r, g, b) XMGColorA((r), (g), (b), 255)
#define XMGRandomColor XMGColor(arc4random_uniform(255), arc4random_uniform(255), arc4random_uniform(255))

#endif
/***** 在#ifdef __OBJC__和#endif之间的内容, 只会拷贝到OC源代码文件中, 不会拷贝到其他语言的源代码文件中 *****/

利用Appearance实现简单的换肤

1
[UISwitch appearance].onTintColor = [UIColor orangeColor];

发布按钮

当viewWillAppear:方法被调用的时候, tabBar内部已经添加了5个UITabBarButton

* 就可以实现一个效果 : [发布按钮]盖在其他UITabBarButton上面

1
2
3
4
5
6
7
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];

/**** 增加一个发布按钮 ****/
[self.tabBar addSubview:self.publishButton];
}

自定义tabBar

打印方法名

1
#define XMGLogFunc XMGLog(@"%s", __func__);

找到中间按钮 NSClassFromString

1
if (subview.class != NSClassFromString(@"UITabBarButton")) continue;

KVC设置tabBar

1
[self setValue:[[XMGTabBar alloc] init] forKeyPath:@"tabBar"];

完善代码

frame.x 方便访问 UIView+XMGExtension.h

设置BarButtonItem

1
self.navigationItem.rightBarButtonItems = @[settingItem, moonItem];

UIBarButtonItem+Extension.h

1
2
3
4
5
6
7
8
9
+ (instancetype)itemWithImage:(NSString *)image highImage:(NSString *)highImage target:(id)target action:(SEL)action
{
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:highImage] forState:UIControlStateHighlighted];
[button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[button sizeToFit];
return [[self alloc] initWithCustomView:button];
}

统一添加返回item

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (self.childViewControllers.count > 0) { // 如果viewController不是最早push进来的子控制器
// 左上角
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setImage:[UIImage imageNamed:@"navigationButtonReturn"] forState:UIControlStateNormal];
[backButton setImage:[UIImage imageNamed:@"navigationButtonReturnClick"] forState:UIControlStateHighlighted];
[backButton setTitle:@"返回" forState:UIControlStateNormal];
[backButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[backButton setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
[backButton sizeToFit];
// 这句代码放在sizeToFit后面
backButton.contentEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0);
[backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

// 隐藏底部的工具条
viewController.hidesBottomBarWhenPushed = YES;
}

// 所有设置搞定后, 再push控制器
[super pushViewController:viewController animated:animated];
}
1
2
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
return self.childViewControllers.count > 1;