仿新浪微博学习笔记01
来源:互联网 发布:韩端机器人编程 编辑:程序博客网 时间:2024/04/28 13:42
最近在跟着视频做一个app,是仿新浪微博的,通过新浪公开的接口来做。虽然是跟着教学视频做的,但是我感觉自己在思考方面有了一些提高,因为他里面的一些思想是我现在所达不到的,为此,我打算把我跟着视频做的写下来,并且巩固一下。
首先,就是创建一个工程,因为我当时建的时候是选择“Single View Application”,但是考虑到要巩固知识,所以界面都是用代码写的,删掉storyboard之后需要在plist文件中删掉,如下图:
然后,就可以开始写代码啦,首先来看一下已经存在的新浪微博的界面是什么样的,然后根据这个微博的样子来做。
可以看到tabbar上有4个item,首页(home),消息(message),发现(discover),我(me),先当做中间的+的那个不存在,这样可以方便一点。
1.首先创建一个TabBarViewController,可以在前面加上自己的姓名缩写,例如我就是QLDTabBarViewController,当然不需要勾选xil。建好了这个之后我就可以自定义tabbar了,当时同时需要修改AppDelegate.m里的代码:
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = [[QLDTabBarViewController alloc] init]; [self.window makeKeyAndVisible]; return YES;
不过为了防止做出来的app出现方向旋转的情况,需要在设置中修改一下:
2.因为有4个不同的界面,所以我需要有4个TableViewController,为此快速创建4个TableViewController: QLDHomeTableViewController、QLDMessageTableViewController、QLDDiscoverTableViewController、QLDMeTableViewController。为了方便以后将程序换了地方也能快速找到,所以我修改了文件夹,首先找到自己存放工程的文件夹,然后按照下面的方式做:
不多说了,就是按照上面的摆放就可以,然后回到Xcode,你会发现头文件、执行文件都变红了,没关系,删掉,然后将Classes文件夹拖进工程就行。
3.回到QLDTabBarViewController.m中,第一步就是初始化所有子控制器,通常我们都可以在viewDidLoad里面将4个子控制器都初始化,但是如果都是按照下面的方法写,那么工程量很大,而且这是很不明智的做法,下面写了不推荐的方法,虽然能达到效果,但是对于代码量和效率来说真的不好:
不推荐:
//1.首页 QLDHomeTableViewController *home = [[QLDHomeTableViewController alloc]init]; home.tabBarItem.title = @"首页"; home.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"]; home.tabBarItem.selectedImage = [UIImage imageNamed:@"tabbar_home_selected"]; UINavigationController *homeNav = [[UINavigationController alloc] initWithRootViewController:home]; [self addChildViewController:homeNav];
最好不要用上面的方法,可以封装一下,
#import "QLDTabBarViewController.h"#import "QLDHomeTableViewController.h"#import "QLDMessageTableViewController.h"#import "QLDMeTableViewController.h"#import "QLDDiscoverTableViewController.h"
#import "UIImage+QLD.h"@interface QLDTabBarViewController ()@end@implementation QLDTabBarViewController- (void)viewDidLoad { [super viewDidLoad]; // 初始化所有的子控制器 [self setupAllChildViewControllers];}/** * 初始化所有子控制器 */- (void) setupAllChildViewControllers{ //1.首页 QLDHomeTableViewController *home = [[QLDHomeTableViewController alloc]init]; [self setupChildViewController: home title: @"首页" imageName:@"tabbar_home" selectedImageName:@"tabbar_home_selected"]; //2.消息 QLDMessageTableViewController *message = [[QLDMessageTableViewController alloc]init]; [self setupChildViewController: message title: @"消息" imageName:@"tabbar_message_center" selectedImageName:@"tabbar_message_center_selected"]; //3.广场 QLDDiscoverTableViewController *discover = [[QLDDiscoverTableViewController alloc]init]; [self setupChildViewController: discover title: @"广场" imageName:@"tabbar_discover" selectedImageName:@"tabbar_discover_selected"]; //4.我 QLDMeTableViewController *me = [[QLDMeTableViewController alloc]init]; [self setupChildViewController: me title: @"我" imageName:@"tabbar_profile" selectedImageName:@"tabbar_profile_selected"];}/** * 初始化一个子控制器 * * @param childVc 需要初始化的子控制器 * @param title 标题 * @param imageName 图标 * @param selectedImageName 选中的图标 */- (void) setupChildViewController: (UIViewController *)childVc title:(NSString *)title imageName: (NSString *)imageName selectedImageName: (NSString *)selectedImageName{ // 1.设置控制器的属性 childVc.title = title; //设置图标 childVc.tabBarItem.image = [UIImage imageWithName:imageName]; // 设置选中的图标 UIImage *selectedImage = [UIImage imageWithName:selectedImageName]; //iOS7 if (iOS7) { // 方法比较渣 // imageName = [imageName stringByAppendingString:@"_os7"]; // selectedImageName = [selectedImageName stringByAppendingString:@"_os7"]; // 设置取消渲染(在 iOS7之后) childVc.tabBarItem.selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; } else { childVc.tabBarItem.selectedImage = selectedImage; } //2.包装一个导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:childVc]; [self addChildViewController:nav];}@end3.由于图片在ios6和ios7之间的不同,所以需要分别判断然后设置,需要创建一个截取图片的类UIImage+QLD,因为我Xcode是6.1的,所以按照下面步骤创建:
4.实现UIImage+QLD的功能:即实现根据不同ios系统,选取相应的图片返回:
UIImage+QLD.m
#import "UIImage+QLD.h"@implementation UIImage (QLD)+ (UIImage *)imageWithName:(NSString *)name{ if (iOS7) { NSString *newName = [name stringByAppendingString:@"_os7"]; UIImage *image = [UIImage imageNamed: newName]; if (image == nil) { // 没有_os7后缀的图片 image = [UIImage imageNamed:name]; } return image; } //非iOS7 return [UIImage imageNamed:name];}@end
- 仿新浪微博学习笔记01
- 仿新浪微博学习笔记02
- 仿新浪微博学习笔记03
- 仿新浪微博学习笔记04
- 仿新浪微博学习笔记05
- 仿新浪微博学习笔记之封装思想
- 仿新浪微博
- 仿新浪微博
- 仿新浪微博
- 开博学习,再接再厉
- 名博学习
- 高仿新浪微博
- android仿新浪微博项目一路上碰到的错误笔记(持续更新)
- 2016/07/16 《jquery仿新浪微博新版搜索下拉特效》学习笔记一
- 仿新浪微博-发布新微博
- 仿新浪微博“返回顶部”效果
- 仿新浪微博底部菜单TabHost
- 仿新浪微博的图片加载
- QQ互联API接口失效,第三方网站的死穴
- leetcode--Reverse Bits
- 盒模型(Box model)
- HDU 1398 Square Coins
- 预编译处理
- 仿新浪微博学习笔记01
- Testing Types - 读书笔记
- JDBC之“总述”
- 【转载】 J2SE知识点归纳笔记(三)---Java面向对象 Part 3
- Codeforces Round #300 B
- 嵌入式C中的volatile用法
- Spring IOC DI原理
- HDU 1028 Ignatius and the Princess III
- 用FilterPro和TINA结合设计有源低通滤波器