iphone开发学习,开源之Three20

摘要:
常用方法也可以添加参数,例如:[mapfrom:@“tt://menu/”toSharedViewController:[MenuControllerclass]];InitWithMenu:指MenuController的方法。使用时,应使用它,例如:tt://menu/1。请参阅TTNavigatorDemo。xcodeproj获取详细信息。②. 页面加载到rootView,即RootViewController。该类继承自UITabBarController,并设置三个条,指向先前定义的链接:@“tt://style”、@“tt//scroll”和@“tt://table”。页面加载第一个,即StyleController。

1.介绍:http://www.xiangwangfeng.com/

2.安装:行之有效的方法

    1.自动:http://www.99css.com/

    2.手动:http://gaobusi.iteye.com/

3.这个app参考了samples里的TTCatalog、TTNavigatorDemo,实现3个页面,功能:

    1.Navigator的左右分别添加TTMessage和TTPost,View显示一个经过TTDefaultStyleSheet修改的text和一个image;

    2.3个Scroll分别包含各种样式的Button、各种样式的TextField、2款Tabbar;

    3.Table的展示(使用TTCatalog的TableItemTestController);

    分别展示:iphone开发学习,开源之Three20第1张iphone开发学习,开源之Three20第2张 iphone开发学习,开源之Three20第3张 iphone开发学习,开源之Three20第4张 iphone开发学习,开源之Three20第5张

4.代码

.从AppDelegate applicationDidFinishLaunching开始:

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    TTNavigator *navigator = [TTNavigator navigator];
    navigator.persistenceMode = TTNavigatorPersistenceModeAll;
    navigator.window = [[[UIWindow alloc] initWithFrame:TTScreenBounds()] autorelease];
    
    TTURLMap *map = navigator.URLMap;
    [map from:@"*" toViewController:[TTWebController class]];
    
    [map from:@"tt://rootView" toSharedViewController:[RootViewController class]];
    [map from:@"tt://style" toViewController:[StyleController class]];
    [map from:@"tt://scroll" toViewController:[ScrollController class]];
    [map from:@"tt://table" toViewController:[TableController class]];
    
    if (![navigator restoreViewControllers]) {
        [navigator openURLAction:[TTURLAction actionWithURLPath:@"tt://rootView"]];
    }
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    [[TTNavigator navigator] openURLAction:[TTURLAction actionWithURLPath:url.absoluteString]];
    return YES;
}

在applicationDidFinishLaunching中定义好了路径及路径初始化类,只需要提交路径,就可以跳转到该Controller。

常用的方法还可以添加参数,像:

[map from:@"tt://menu/(initWithMenu:)" toSharedViewController:[MenuController class]];

initWithMenu:为MenuController的方法,使用时,需要使用时,如:tt://menu/1

具体查看TTNavigatorDemo.xcodeproj,很详细。

.页面加载进入rootView,也就是RootViewController,此类继承至UITabBarController,并设置3个bar,分别指向前面定义好的链接:

@"tt://style",@"tt://scroll",@"tt://table"

页面加载第一个,也就是StyleController。

.页面使用initWithNibName定义2个新的路径:

[[TTNavigator navigator].URLMap from:@"tt://compose" toModalViewController:self selector:@selector(composeTo:)];//以模态形式打开
[[TTNavigator navigator].URLMap from:@"tt://post" toViewController:self selector:@selector(post:)];//打开

分别指向2个方法。

loadView方法,在Navigator中添加左、右按钮,并打开链接:

target:@"tt://compose" action:@selector(openURLFromButton:)//openURLFromButton为预定义方法,打开target指定的链接
//预定义了好多方法

2个action://只是单纯的创建

- (UIViewController *)composeTo:(NSString *)str
{
    TTMessageController *controller = [[[TTMessageController alloc] init] autorelease];
    return controller;
}
- (UIViewController *)post:(NSDictionary *)query
{
    TTPostController *controller = [[[TTPostController alloc] init] autorelease];
    return controller;
}

Three20的样式很厉害,通过TTDefaultStyleSheet直接定义样式:

    NSString *Text = @"This is <b>Text</b>, <i>Look:</i><span class=\"blueText\">bule</span>;";
    TTStyledTextLabel *label = [[[TTStyledTextLabel alloc] initWithFrame:CGRectMake(50.0, 100.0, 200.0, 100.0)] autorelease];
    label.text = [TTStyledText textFromXHTML:Text lineBreaks:YES URLs:YES];//text
    label.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1];//背景
    [self.view addSubview:label];

定义的Text中,span包含class属性,这个属性的值在TTDefaultStyleSheet继承类实现:

- (TTStyle *)blueText{
    return [TTTextStyle styleWithColor:[UIColor blueColor] next:nil];//字符颜色为蓝色 next相当于点表达式
  //样式很丰富,详细看TTStyleCatalog.xcodeproj
}

在实现此样式前,在initWithNib中,需要定义:

[TTStyleSheet setGlobalStyleSheet:[[[Styles alloc] init] autorelease]];//方法都写在了styles中

这样,包含class为blueText的文本,字体颜色就为蓝色。

在viewDidLoad方法,添加一个图片:

- (void)viewDidLoad
{
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20.0, 20.0, 48.0, 48.0)];
    UIImage *image = [UIImage imageNamed:@"China.gif"];    
    imageView.image = image;
    [self.view addSubview:imageView];
}

在init中初始化2个链接,释放:

- (void)dealloc
{
    [[TTNavigator navigator].URLMap removeURL:@"tt://compose"];
    [[TTNavigator navigator].URLMap removeURL:@"tt://post"];
    [super dealloc];
}

④.ScrollController简单介绍:

初始化initWithNibName方法中,必不可少的样式(TTStyleSheet)和一个颜色数组定义。

[TTStyleSheet setGlobalStyleSheet:[[[Styles alloc] init] autorelease]];
        colors = [[NSArray arrayWithObjects:[UIColor colorWithWhite:0.9 alpha:1],
                  [UIColor blueColor],
                  [UIColor grayColor], nil] retain];

此颜色就是Scroll的背景颜色。

loadView方法中,定义页面控制器和添加一个Scroll:

    CGRect appFrame = [UIScreen mainScreen].applicationFrame;
    CGRect frame = CGRectMake(0, 0, appFrame.size.width, appFrame.size.height -44);
    self.view = [[[UIView alloc] initWithFrame:frame] autorelease];

    pageControl = [[TTPageControl alloc] initWithFrame:CGRectMake(0, 0, self.view.width, 20)];
    //...
    [self.view addSubview:pageControl];
    
    scrollView = [[TTScrollView alloc] initWithFrame:CGRectMake(0, pageControl.bottom, self.view.bounds.size.width, 350)];
    //...
    [self.view addSubview:scrollView];

控制当前页码的方法分别页面控制器的changePage和Scroll的delegate方法:didMoveToPageAtIndex

- (void)changePage:(id)sender
{
    int page = pageControl.currentPage;
    [scrollView setCenterPageIndex:page];
}

改变pageControl的pageIndex,则改变ScrollView的pageIndex,显示不同的内容。而每当ScrollView改变,也需要修改pageControl的pageIndex。

- (void)scrollView:(TTScrollView *)scrollView didMoveToPageAtIndex:(NSInteger)pageIndex
{
    pageControl.currentPage = pageIndex;
}

在ScrollView dataSource中,根据传入的pageIndex值,添加页面的显示内容:

pageIndex==0时,执行:

NSArray* buttons = [NSArray arrayWithObjects:
                            [TTButton buttonWithStyle:@"toolbarBackButton:" title:@"Back Button"],//toolbarBackButton预定义样式
                            [TTButton buttonWithStyle:@"blackForwardButton:" title:@"Black Button"],
                            [TTButton buttonWithStyle:@"dropButton:" title:@"Shadow Button"],
                            nil];
        for (TTButton* button in buttons) {
            button.font = [UIFont boldSystemFontOfSize:12];
            button.frame = CGRectMake(80, height, 100, 30);
            [button sizeToFit];
            [pageView addSubview:button];
            height += 50;
        }

blackForwardButton和dropButton都为自己定义,在Styles文件中。

pageIndex==1时,显示各种各样的view。//从此处看,样式类很丰富。

当pageIndex==2时,即第3个页面,显示各种TTTabBar。

TTTabStrip、TTTabBar、TTTabGrid
//定义不同,样式表现不

.最后一个标签为TableController,表操作在Three20中,变的很简便,像这样:

self.dataSource = [TTSectionedDataSource dataSourceWithObjects:
                           @"Links and Buttons",
                           [TTTableTextItem itemWithText:@"TTTableTextItem"],
                           [TTTableButton itemWithText:@"TTTableButton"],@"Images",
                           [TTTableImageItem itemWithText:@"TTTableImageItem" imageURL:localImage URL:@"tt://tableItemTest"],

使用dataSource,就能完成页面布置。

设置分组模式:

self.tableViewStyle = UITableViewStyleGrouped;

在这个app中,直接拷贝了TTCatalog.xcodeproj的TableItemTestController代码,其主要介绍以TTTable开头的各种预表样式定义,简单的设置就能达到好看的展示。

详细部分看TTCatalog.xcodeproj demo。

@end

Code Download

 

转载时请务必以超链接形式标明文章原始出处作者信息及此声明

免责声明:文章转载自《iphone开发学习,开源之Three20》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS 6.3 安装过程分享一个博客园皮肤制作脚手架下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MFC入门(二)

1 基于对话框学习控件   1.1 对话框 模态非模态   1.2 按钮 两个 captain修改内容  直接输入内容   1.3 点击触发事件           右侧属性 闪电图标 ;         右键按钮 添加事件处理程序 ;         双击按钮,(只能是点击事件)   1.4 插入窗口  窗口 右键 添加类   1.5 模态窗口创建...

Selenium+Python:下载文件(Firefox 和 Chrome)

引自  https://blog.csdn.net/Momorrine/article/details/79794146 1.      环境 操作系统 Win10 IDE Eclipse (Oxygen 4.7)+ PyDev 5.9.2 (JDK1.8) Python 3.5 Selenium selenium-3.9.0-py2.py...

Qt 设置窗口属性setWindowFlags函数

Qt 设置窗口属性setWindowFlags函数 说明:setWindowFlags函数就是设置窗口属性,本博客主要分析此函数的参数 本博客转载CSDN博主「hjhomw」的原创文章。原文链接:https://blog.csdn.net/hejun_haitao/java/article/details/50815695 主要是记录一下项目中遇到的问题...

IOS开发--仿制网易新闻

学习来源:袁峥老师的《快速集成App中顶部标题滚动条》 此次博文写的是按需求分析写代码,思路条理性杠杠的,可以提高的编码实现速度哦。 效果:   根据这个网易新闻的界面,需求分析:     需要的对象:           1、导航控制器默认会生成的导航条,上面可以设置title(当然也可以另外自定义View设置导航条title)           2...

苹果产品时间发布表统计(iPhone、iPad),以及32位和64位机的说明

之前因为某些原因,需要对apple家族的手机和pad产品做一个上市时间排序,以及分析分别是哪种CPU机型 总结如下: iPad家族: 1、iPad     - 2010.1.27发布 2、iPad 2    - 2011.3.3发布 3、iPad Mini   - 2012年底发布 4、iPad Air    - 2013.10.23发布 5、iPad M...

python tkinter 学生信息管理系统

使用tkinter模块,python3.6,主要功能有添加,查询,删除,修改学生信息 使用模版: 1 from tkinter import * 2 import tkinter.font as tkFont 3 import tkinter as tk 4 from tkinter import ttk 最主要也是最难做的是,实现不同功能的界面在同一TK...