iPhone开发之九宫格实现(二)

  在上一篇中,使用了单个单元定位来实现九宫格,有点是很容易理解,但是在添加单元和设置位置时比较麻烦。那么,第二种方法就是用table来实现,将一格表示为一个图片和一个label的集合来实现。

工程截图:

每一个用ImageAndTitle来表示:

#import <Foundation/Foundation.h>

@interface ImageAndTitle : NSObject {
NSString * Image;
NSString * Title;
}

-(id)InitWithImage:(NSString *)image AndTitle:(NSString *)title;
@property (nonatomic ,retain) NSString * Image;
@property (nonatomic ,retain) NSString * Title;
@end
#import "ImageAndTitle.h"

@implementation ImageAndTitle
@synthesize Image,Title;

-(id)InitWithImage:(NSString *)image AndTitle:(NSString *)title{
if (self=[super init]) {
self->Image=[[NSString alloc]initWithString:image];
self->Title=[[NSString alloc]initWithString:title];
}
return self;
}

@end

两个表格单元,ViewCell

#import <UIKit/UIKit.h>


@interface ViewCell : UITableViewCell {
IBOutlet UIButton *btn1;
IBOutlet UIButton *btn2;
IBOutlet UIButton *btn3;
IBOutlet UILabel *lbl1;
IBOutlet UILabel *lbl2;
IBOutlet UILabel *lbl3;
id delegate;
}
@property (assign) id delegate;
@property (nonatomic,retain) UIButton *btn1;
@property (nonatomic,retain) UIButton *btn2;
@property (nonatomic,retain) UIButton *btn3;
@property (nonatomic,retain) UILabel *lbl1;
@property (nonatomic,retain) UILabel *lbl2;
@property (nonatomic,retain) UILabel *lbl3;

-(IBAction)click:(id)sender;
@end

@protocol cellItemDelegate

@optional
-(void)onCellItem:(int)index;

@end
#import "ViewCell.h"


@implementation ViewCell
@synthesize btn1,btn2,btn3,lbl1,lbl2,lbl3,delegate;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
// Initialization code
}
return self;
}

-(IBAction)click:(id)sender{
UIButton *button = (UIButton *)sender;
NSLog(@"tag:%d",button.tag);
[delegate onCellItem:button.tag];
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[super setSelected:selected animated:animated];

// Configure the view for the selected state
}


- (void)dealloc {
[btn1 release];
[btn2 release];
[btn3 release];
[lbl1 release];
[lbl2 release];
[lbl3 release];
[delegate release];
[super dealloc];
}


@end

CellTwo:

#import <UIKit/UIKit.h>


@interface CellTwo : UITableViewCell {
IBOutlet UIButton *btn11;
IBOutlet UIButton *btn22;
IBOutlet UIButton *btn33;
IBOutlet UILabel *lbl11;
IBOutlet UILabel *lbl22;
IBOutlet UILabel *lbl33;
id delegate;
}
@property (assign) id delegate;
@property (nonatomic,retain) UIButton *btn11;
@property (nonatomic,retain) UIButton *btn22;
@property (nonatomic,retain) UIButton *btn33;
@property (nonatomic,retain) UILabel *lbl11;
@property (nonatomic,retain) UILabel *lbl22;
@property (nonatomic,retain) UILabel *lbl33;

-(IBAction)click:(id)sender;
@end

@protocol cellItemTwoDelegate

@optional
-(void)onCellItem:(int)index;

@end
#import "CellTwo.h"


@implementation CellTwo

@synthesize btn11,btn22,btn33,lbl11,lbl22,lbl33,delegate;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
// Initialization code
}
return self;
}

-(IBAction)click:(id)sender{
UIButton *button = (UIButton *)sender;
NSLog(@"tag:%d",button.tag);
[delegate onCellItem:button.tag];
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[super setSelected:selected animated:animated];

// Configure the view for the selected state
}


- (void)dealloc {
[btn11 release];
[btn22 release];
[btn33 release];
[lbl11 release];
[lbl22 release];
[lbl33 release];
[delegate release];
[super dealloc];
}


@end

LOGOViewController:

 
  
#import <UIKit/UIKit.h>
#import "ImageAndTitle.h"
@class ViewCell;
@class CellTwo;
@interface LOGOViewController : UIViewController<UITableViewDelegate, UITableViewDataSource> {
IBOutlet ViewCell *viewCell;
IBOutlet CellTwo *celltwo;
IBOutlet UITableView *tableview;
NSMutableArray *itemArray;
}

@property(nonatomic, retain)ViewCell *viewCell;
@property (nonatomic ,retain)CellTwo *celltwo;
@property(nonatomic, retain)UITableView *tableview;
-(void)setItem:(NSArray *)temperatureArray;
-(void)addItem:(ImageAndTitle *)iat;
@end


 

#import "LOGOViewController.h"
#import "ViewCell.h"
#import "ImageAndTitle.h"
#import "CellTwo.h"

@implementation LOGOViewController
@synthesize viewCell,tableview,celltwo;

NSArray * titleArray;
NSArray * imageArray;


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
self->itemArray=[[NSMutableArray alloc]init];
NSArray * itemarray=[NSArray arrayWithObjects:
[[ImageAndTitle alloc]InitWithImage:@"Dandelion.gif" AndTitle:@"a"],
[[ImageAndTitle alloc]InitWithImage:@"Ixia.gif" AndTitle:@"b"],
[[ImageAndTitle alloc]InitWithImage:@"Spiked.gif" AndTitle:@"c"],
[[ImageAndTitle alloc]InitWithImage:@"Dandelion.gif" AndTitle:@"d"],
[[ImageAndTitle alloc]InitWithImage:@"Ixia.gif" AndTitle:@"e"],
[[ImageAndTitle alloc]InitWithImage:@"Spiked.gif" AndTitle:@"f"],
[[ImageAndTitle alloc]InitWithImage:@"Dandelion.gif" AndTitle:@"g"],
[[ImageAndTitle alloc]InitWithImage:@"Ixia.gif" AndTitle:@"h"],
[[ImageAndTitle alloc]InitWithImage:@"Spiked.gif" AndTitle:@"i"],
[[ImageAndTitle alloc]InitWithImage:@"Dandelion.gif" AndTitle:@"j"],
nil];
[self setItem:itemarray];

}

-(void)setItem:(NSArray *)temperatureArray{
[self->itemArray addObjectsFromArray:temperatureArray];
}

-(void)addItem:(ImageAndTitle *)iat{
[self->itemArray addObject:iat];
}

// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
// return (interfaceOrientation == UIInterfaceOrientationPortrait);
// [self->tableview reloadData];
// [self.view reloadData];
[self->tableview reloadData];
return YES;
}


- (void)dealloc {
[super dealloc];
[self->itemArray release];
}

#pragma mark tableView datasource
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 100;
}
//返回TableView的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
int i=[itemArray count]/3;
i++;
return i;
// return [titleArray count]/3;
}

#pragma mark setCellType
- (UITableViewCell *)setCellItem:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIdentifier = @"ViewCell";
ViewCell *cell = (ViewCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"ViewCell" owner:self options:nil];
cell = viewCell;
}
if ((indexPath.row*3)<=([itemArray count]-1)) {
ImageAndTitle * i=[itemArray objectAtIndex:indexPath.row*3];
cell.lbl1.text=[NSString stringWithFormat:@"%@",i.Title];
[cell.btn1 setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@",i.Image]] forState:UIControlStateNormal];
[cell.btn1 setTag:indexPath.row*3];
}
if ((indexPath.row*3+1)<=([itemArray count]-1)) {
ImageAndTitle * i=[itemArray objectAtIndex:indexPath.row*3+1];
cell.lbl2.text=[NSString stringWithFormat:@"%@",i.Title];
[cell.btn2 setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@",i.Image]] forState:UIControlStateNormal];
[cell.btn2 setTag:indexPath.row*3+1];
}
if ((indexPath.row*3+2)<=([itemArray count]-1)) {
ImageAndTitle * i=[itemArray objectAtIndex:indexPath.row*3+2];
cell.lbl3.text=[NSString stringWithFormat:@"%@",i.Title];
[cell.btn3 setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@",i.Image]] forState:UIControlStateNormal];
[cell.btn3 setTag:indexPath.row*3+2];
}
return cell;
}

- (UITableViewCell *)setCellItem:(UITableView *)tableView cellForRowAtIndexPathTwo:(NSIndexPath *)indexPath{
static NSString *cellIdentifier = @"CellTwo";
CellTwo *cell = (CellTwo *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"CellTwo" owner:self options:nil];
cell = celltwo;
}
if ((indexPath.row*3)<=([itemArray count]-1)) {
ImageAndTitle * i=[itemArray objectAtIndex:indexPath.row*3];
cell.lbl11.text=[NSString stringWithFormat:@"%@",i.Title];
[cell.btn11 setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@",i.Image]] forState:UIControlStateNormal];
[cell.btn11 setTag:indexPath.row*3];
}
if ((indexPath.row*3+1)<=([itemArray count]-1)) {
ImageAndTitle * i=[itemArray objectAtIndex:indexPath.row*3+1];
cell.lbl22.text=[NSString stringWithFormat:@"%@",i.Title];
[cell.btn22 setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@",i.Image]] forState:UIControlStateNormal];
[cell.btn22 setTag:indexPath.row*3+1];
}
if ((indexPath.row*3+2)<=([itemArray count]-1)) {
ImageAndTitle * i=[itemArray objectAtIndex:indexPath.row*3+2];
cell.lbl33.text=[NSString stringWithFormat:@"%@",i.Title];
[cell.btn33 setImage:[UIImage imageNamed:[NSString stringWithFormat:@"%@",i.Image]] forState:UIControlStateNormal];
[cell.btn33 setTag:indexPath.row*3+2];
}
return cell;
}

//初始化TableViewCell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
switch ([UIApplication sharedApplication].statusBarOrientation) {
case 1:
return [self setCellItem:tableView cellForRowAtIndexPath:indexPath];
break;
case 2:
return [self setCellItem:tableView cellForRowAtIndexPath:indexPath];
break;
case 3:
return [self setCellItem:tableView cellForRowAtIndexPathTwo:indexPath];
break;
case 4:
return [self setCellItem:tableView cellForRowAtIndexPathTwo:indexPath];
break;
default:
break;
}
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

}

- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath{
return nil;
}

@end

实现后的效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值