iOS XMPP Framework 03 - 创建应用程序框架

这一节我们将创建一个用于实现XMPP framework的工程并实现应用程序的导航界面。

打开已经写好的模板工程

http://pan.baidu.com/s/1o6jyOsE

转载请注明出处:http://blog.csdn.net/yamingwu/article/details/43158027

模板工程的执行效果如下:


模板工程创建了一个滑动侧边栏菜单,我们来看看模板工程中的各个类已经实现了什么样的功能。

Helpers

YDHelper类实现了一个名为colorWithHexString的静态函数,用于为菜单项着色。

+ (UIColor *)colorWithHexString:(NSString *)stringToConvert
{
    NSString *noHashString = [stringToConvert stringByReplacingOccurrencesOfString:@"#" withString:@""]; // remove the #
    NSScanner *scanner = [NSScanner scannerWithString:noHashString];
    [scanner setCharactersToBeSkipped:[NSCharacterSet symbolCharacterSet]]; // remove + and $
    unsigned hex;
    if (![scanner scanHexInt:&hex]) return nil;
    int r = (hex >> 16) & 0xFF;
    int g = (hex >> 8) & 0xFF;
    int b = (hex) & 0xFF;
    return [UIColor colorWithRed:r / 255.0f green:g / 255.0f blue:b / 255.0f alpha:1.0f];
}
为了使这个函数成为全局函数,我们将YDHelper.h加入到预编译头文件YDChat-Prefix.pch中。
#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#import "YDDefinitions.h"
#import "YDHelper.h"
#endif
Definitions
YDDefinitions.h用于统一定义在应用程序中需要使用到的常量。这里定义了一些用于创建菜单的tag和服务器相关的一些域名。

#ifndef YDChat_YDDefinitions_h
#define YDChat_YDDefinitions_h

//Menu Items
static const NSString*  YDSLideMenuStateNotificationEvent = @"YDSlideMenuStateNotificationEvent";
static const float tablewidth  = 270.0f;

#define kMenuHomeTag                @"kMenuHomeTag"
#define kMenuChatsTag               @"kMenuChatsTag"
#define kMenuContactsTag            @"kMenuContactsTag"
#define kMenuGroupChatTag           @"kMenuGroupChatTag"
#define kMenuSettingsTag            @"kMenuSettingsTag"



#define kXMPPServer                 @"openfire.yourdeveloper.net"
#define kxmppProxyServer            @"openfire.yourdeveloper.net"
#define kxmppConferenceServer       @"@conference.openfire.yourdeveloper.net"
#define kxmppSearchServer           @"search.openfire.yourdeveloper.net"

#endif

创建菜单

侧边栏相关的代码存放在SlideMenu目录下,image中存放了侧边栏使用到的一些图标。

YDMenuItem类用于存放一个menu项对应的信息,比如:标题、颜色和图片名称等等。使用iniWithTitle方法对其进行初始化。

#import "YDMenuItem.h"
@interface YDMenuItem()

@property (nonatomic, strong) NSString *menuTitle;
@property (nonatomic, strong) NSString *backgroundColorHexString;
@property (nonatomic, strong) NSString *textColorHexString;
@property (nonatomic, strong) NSString* controllerTAG;
@property (nonatomic, strong) NSString* imageName;

@end

@implementation YDMenuItem

-(id)initWithTitle:(NSString *)title backgroundColorHexString:(NSString *)bgColorHexString textColorHexString:(NSString *)txtColorHexString viewControllerTAG:(NSString *)tag  imageName:(NSString *)image
{self = [super init];
	if ( self != nil)
	{
        self.menuTitle=title;
        self.backgroundColorHexString=bgColorHexString;
        self.textColorHexString=txtColorHexString;
        self.controllerTAG=tag;
        self.imageName=image;
	}
	return self;
}
@end
YDLeftMenuViewController是继承于ViewController用于绘制包含YDMenuItem的UITableView。didSelectRowAtIndexPath代理方法获取被选中的YDMenuItem,通知leftMenuSelectionItemClick的代理并将YDMenuItem传递给代理类。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    YDMenuItem* item = [self.menuItems objectAtIndex:indexPath.row];
    [self.delegate leftMenuSelectionItemClick:item];
    
}
YDSlideMenuContainerViewController是侧边栏导航结构的核心,它负责绘制动画并对菜单进行监控。
YDBaseViewController类创建了一个UIBarButtonItem作为左侧的导航按钮,用于打开侧边栏:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    //if you dont want the menu buttons remove the following code 
    //Create left menu button
    UIBarButtonItem *leftRevealButtonItem = [[UIBarButtonItem alloc] initWithImage:
                                             [UIImage imageNamed:@"reveal-icon.png"]
                                                                             style:UIBarButtonItemStyleBordered
                                                                            target:self action:@selector(toggleLeftMenu:)];
    self.navigationItem.leftBarButtonItem = leftRevealButtonItem;
 
}
YDHomeViewController作为应用程序的主界面继承于YDBaseViewController,暂时没有任何实际的功能,只是将背景设置为白色。

- (void)viewDidLoad
{
    [super viewDidLoad];
	self.view.backgroundColor=[UIColor whiteColor];
}

实现菜单

YDAppDelegate类用于构建整个应用程序,包括主界面、navigation controller和侧边栏

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    application.statusBarHidden = YES;
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;
    self.rootViewController = [[YDHomeViewController alloc] init];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:self.rootViewController];
    //self.navigationController.navigationBarHidden = YES;
    self.window.rootViewController = self.navigationController;
    //Create left menu
    YDMenuItem* homeItem = [[YDMenuItem alloc]initWithTitle:@"Home" backgroundColorHexString:@"0xcece10" textColorHexString:@"0xffffff" viewControllerTAG:kMenuHomeTag imageName:@""];
    YDMenuItem* item1 = [[YDMenuItem alloc]initWithTitle:@"Chats" backgroundColorHexString:@"0xcece10" textColorHexString:@"0xffffff" viewControllerTAG:kMenuChatsTag imageName:@"chat"];
    YDMenuItem* item2 = [[YDMenuItem alloc]initWithTitle:@"Contacts" backgroundColorHexString:@"0xbb11bb" textColorHexString:@"0xffffff" viewControllerTAG:kMenuContactsTag imageName:@"contacts"];
    YDMenuItem* item3 = [[YDMenuItem alloc]initWithTitle:@"Group chat" backgroundColorHexString:@"0xaaaaaa" textColorHexString:@"0xffffff" viewControllerTAG:kMenuGroupChatTag imageName:@"groupicon"];
      YDMenuItem* item4 = [[YDMenuItem alloc]initWithTitle:@"Settings" backgroundColorHexString:@"0xaaaaaa" textColorHexString:@"0xffffff" viewControllerTAG:kMenuSettingsTag imageName:@"settings"];
    
    //create left menu Controller
    self.leftMenuViewController = [[YDLeftMenuViewController alloc] init];
    self.leftMenuViewController.delegate=self;
    self.leftMenuViewController.menuItems = [NSArray arrayWithObjects:homeItem,item1,item2,item3,item4,nil];
    //create and setup Container
    self.container = [YDSlideMenuContainerViewController
                      containerWithCenterViewController:self.navigationController
                      leftMenuViewController:self.leftMenuViewController
                      rightMenuViewController:nil];
    
    self.window.rootViewController = self.container;
    self.container.delegate=self;
    [self.window makeKeyAndVisible];
    return YES;
}
并实现了侧边栏的两个代理方法leftMenuSelectionItemClick和toggleLeftMenu
#pragma mark SlideMenu Delegate
-(void)leftMenuSelectionItemClick:(YDMenuItem *)item
{
    
    if ([item.controllerTAG length]>0)
        {
        [self.container setMenuState:YDSLideMenuStateClosed];

        if ([item.controllerTAG isEqualToString:kMenuHomeTag])
            {
            //allocate the View Controller
            //[self.navigationController PushViewController:vc animated:YES];

            }
        }
}
 

-(void)toggleLeftMenu
{
    if (self.container.menuState == YDSLideMenuStateLeftMenuOpen)
        {
        [self.container setMenuState:YDSLideMenuStateClosed];
        }
    else
        {
        [self.container setMenuState:YDSLideMenuStateLeftMenuOpen];
        }
    
}
至此,应用程序的基本骨架就建立好了,下一节我们会将XMPP Framework添加到工程中。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值