zoukankan      html  css  js  c++  java
  • 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

    实现后的效果:

  • 相关阅读:
    P3387 【模板】缩点 tarjan
    P2831 愤怒的小鸟 状压dp
    交流帖
    P3959 宝藏 模拟退火。。。
    B1060 [ZJOI2007]时态同步 dfs
    P1850 换教室 概率dp
    树链刨分(待修改)
    B3403 [Usaco2009 Open]Cow Line 直线上的牛 deque
    B3402 [Usaco2009 Open]Hide and Seek 捉迷藏 最短路
    B5248 [2018多省省队联测]一双木棋 状压dp
  • 原文地址:https://www.cnblogs.com/foxmin/p/2410364.html
Copyright © 2011-2022 走看看