TableView with 2 colums by row , iphone/ipad

2020-08-01 03:26发布

问题:

Can anybody tell me how to create a tableview with two cells by colums in the Iphone SDK??

order in like this :

  _____________
  |  1  |   2  |
  |_____|______|
  |  3  |   4  |
  |_____|______|

Best regards

回答1:

In ios UITableView you can only have one column/cell. If you want more propertyes, in a same cell you need to create a custom table view cell by subcalssing UITableViewCell. In interface builder you can customize the layout. TUTORIAL: http://adeem.me/blog/2009/05/30/iphone-sdk-tutorial-part-6-creating-custom-uitableviewcell-using-interface-builder-uitableview/

Concrete example for your problem:

the .h file:

 #import <UIKit/UIKit.h>


@interface MyCell : UITableViewCell {
    UIButton * column1;
    UIButton * column2;

    UILabel* column1_label1;
    UILabel* column1_label2;

    UILabel* column2_label1;
    UILabel* column2_label2;
}

@property (nonatomic,retain) UIButton * column1;
@property (nonatomic,retain) UIButton * column2;

@property (nonatomic,retain) UILabel* column1_label1;
@property (nonatomic,retain) UILabel* column1_label2;

@property (nonatomic,retain) UILabel* column2_label1;
@property (nonatomic,retain) UILabel* column2_label2;

@end

the .m file:

#import "MyCell.h"


@implementation MyCell

@synthesize column1,column1_label1,column1_label2,column2,column2_label1,column2_label2;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        column1 = [UIButton buttonWithType: UIButtonTypeCustom];
        column1.tag = 1;
        column1.autoresizingMask = 292;

        column1.backgroundColor = [UIColor redColor];
        column1.frame = CGRectMake(0, 0, self.contentView.bounds.size.width/2,  self.contentView.bounds.size.height);


        column1_label1 = [[UILabel alloc] initWithFrame: CGRectMake(column1.bounds.size.width*1/5,
                                                                             0,
                                                                             column1.bounds.size.width*4/5,
                                                                             column1.bounds.size.height/2)];

        column1_label1.backgroundColor = [UIColor redColor];
        [column1 addSubview:column1_label1]; 

        column1_label2 = [[UILabel alloc] initWithFrame: CGRectMake(column1.bounds.size.width*1/5,
                                                                             column1.bounds.size.height/2,
                                                                             column1.bounds.size.width*4/5,
                                                                             column1.bounds.size.height/2)];

        column1_label2.backgroundColor = [UIColor greenColor];
        [column1 addSubview:column1_label2]; 

        [self.contentView addSubview: column1]; 




        column2 = [UIButton buttonWithType: UIButtonTypeCustom];


        column2.tag = 2;
        column2.autoresizingMask = 292;

        column2.backgroundColor = [UIColor greenColor];
        column2.frame = CGRectMake(self.contentView.bounds.size.width/2, 0, self.contentView.bounds.size.width/2,  self.contentView.bounds.size.height);

        column2_label1 = [[UILabel alloc] initWithFrame: CGRectMake(column2.bounds.size.width*1/5,
                                                                             0,
                                                                             column2.bounds.size.width*4/5,
                                                                             column2.bounds.size.height/2)];

        column2_label1.backgroundColor = [UIColor redColor];
        [column2 addSubview:column2_label1]; 

        column2_label2 = [[UILabel alloc] initWithFrame: CGRectMake(column2.bounds.size.width*1/5,
                                                                             column2.bounds.size.height/2,
                                                                             column2.bounds.size.width*4/5,
                                                                             column2.bounds.size.height/2)];

        column2_label2.backgroundColor = [UIColor greenColor];
        [column2 addSubview:column2_label2]; 


        [self.contentView addSubview: column2];
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

- (void)dealloc
{
    [super dealloc];
}

@end

the usage in UITableViewController:

   - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    // Return the number of rows in the section.
    return 40;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    MyCell * mycell2 = ((MyCell*)cell);
    if (cell == nil) {
        cell = [[[MyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        [mycell2.column1 addTarget:self action:@selector(column1Selected:) forControlEvents:UIControlEventTouchUpInside];
        [mycell2.column2 addTarget:self action:@selector(column1Selected:) forControlEvents:UIControlEventTouchUpInside];        
    }

    // Configure the cell...

    mycell2.column1_label1.text = @"column1_label1";
    mycell2.column1_label2.text = @"column1_label2";
    mycell2.column1.tag = indexPath.row*2;
    mycell2.column2_label1.text = @"column2_label1";
    mycell2.column2_label2.text = @"column2_label2";
    mycell2.column2.tag = indexPath.row*2 +1;
    return cell;
}

- (void) column1Selected: (id) sender
{

    UIAlertView *alert = [[ UIAlertView alloc]                          
                          initWithTitle: @" Alert"                          
                          message: [NSString stringWithFormat: @"button %d",((UIButton *) sender).tag]
                          delegate: nil                          
                          cancelButtonTitle: @" OK"                          
                          otherButtonTitles: nil];    
    [alert show] ;
    [alert release];
}


回答2:

In iOS6 you can use the UICollectionView.

If you need iOS5 support AQGridView is a grid control that will give you what you are after.