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
实现后的效果: