仿新浪微博学习笔记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];}@end
3.由于图片在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


0 0