如何使UITableView像下面的图像?

时间:2011-12-03 08:30:32

标签: iphone objective-c cocoa-touch uitableview

enter image description here

如何像上面的图像一样制作UITableView?

我知道这是分组表类型。但我们如何将图像+标签+按钮添加到部分的标题。

我试过了

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

但它以CGRectMake(0,0,320,height)开头。

我想要的部分和部分的精确宽度就像在图像中一样。

提前致谢。

4 个答案:

答案 0 :(得分:2)

您可能希望创建一个带有棕色背景,标签和按钮的自定义单元格,而不是尝试更改节标题视图,而是将其用于第一行。因此,在-cellForRowAtIndexPath中,您可以执行类似

的操作
if (0 == indexPath.row) {
  return brownCell;
} else {
  return normalCell;
}

创建自定义单元格有多种方法,我总是从Table View Programming Guide for iOS开始。

答案 1 :(得分:0)

its easy all what you have to

    -(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        NSUInteger row = [indexPath row];
        if (row % 2 == 0) {
            static NSString *identifier = @"RowOne";
            UITableViewCell *cell = (RowTypeOne*)[tableView dequeueReusableCellWithIdentifier:identifier];
            if (cell == nil) {
            cell = [UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault]autorelease];
            }
            cell.Title.text = [datasource objectatindex:row];
            cell.Title.font = [UIFont fontWithName:@"Tahoma" size:16];
cell.contentView.backgroundColor = [UIColor redColor];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.textAlignment = UITextAlignmentRight;
            return cell;
        }else if (row % 2 == 1) {
            static NSString *identifier = @"RowTwo";
            UITableViewCell *cell = (RowTypeOne*)[tableView dequeueReusableCellWithIdentifier:identifier];
            if (cell == nil) {
            cell = [UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault]autorelease];
            }
cell.contentView.backgroundColor = [UIColor redColor];
            cell.Title.text = [datasource objectatindex:row];
            cell.Title.font = [UIFont fontWithName:@"Tahoma" size:16];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.textLabel.textAlignment = UITextAlignmentRight;
            return cell;
        }
        return nil;
    }

答案 2 :(得分:0)

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
        //create btn left each on handeled by selector
    UIBarButtonItem *btnleft = [[UIBarButtonItem alloc] initWithTitle:@"List of sms" style:UIBarButtonItemStylePlain target:self action:@selector(ListClicked:)];
     //create btn right each on handeled by selector
    UIBarButtonItem *btnright = [[UIBarButtonItem alloc] initWithTitle:@"New" style:UIBarButtonItemStyleBordered target:self action:@selector(NewClicked:)];
        //create uitoolbar then add btns to it as list of array
    UIToolbar *tool = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
        //change style of toolbar to be black
    [tool setBarStyle:UIBarStyleBlack];
    tool.items = [NSArray arrayWithObjects:btnleft,[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],btnright, nil];

        //this is the parent view that we will add on it the uitoolbar objects and the buttons
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    [view autorelease];
    [view addSubview:tool];

    return view;
}
-(void)ListClicked:(id)sender{
        //handle here btn left
}
-(void)NewClicked:(id)sender{
    //handle here btn right
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
    return 44;
}

如果您希望单元格不在标题中,您可以在索引路径的cellforrow中检查第一行... 如果你想用另一种风格做,你可以制作自定义单元格并将其添加到cellforrowatindexpath

答案 3 :(得分:0)

CustomCell.h

#import <UIKit/UIKit.h>

@interface CustomCell : UITableViewCell{
    id delegate;
    NSIndexPath *indexpath;
}
@property(nonatomic,assign) id delegate;
@property(nonatomic,retain)NSIndexPath *indexpath;
@property(nonatomic,retain) IBOutlet UIToolbar *Toolbar;


-(IBAction)SelectorLeft:(id)sender;
-(IBAction)SelectorRight:(id)sender;
@end

customcell.m

#import "CustomCell.h"
#import <QuartzCore/QuartzCore.h>
@implementation CustomCell
@synthesize Toolbar;
@synthesize delegate,indexpath;
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}
-(IBAction)SelectorLeft:(id)sender{
    [delegate perfromselector:@selector(left:) withObject:indexpath];
}
-(IBAction)SelectorRight:(id)sender{
    [delegate perfromselector:@selector(left:) withObject:indexpath];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

UItbaleView部分

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *identifier = @"identifier";
    NSUInteger row = [indexPath row];

    if (row == 0) {
        CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:identifier];
        if (cell == nil) {
            self.Cell = nil;
            [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
            cell = self.Cell;
        }
        cell.Toolbar.clipsToBounds=YES;
        CALayer *l=cell.Toolbar.layer;
            // set corner radious
        [l setCornerRadius:10];
            // to apply border on corners
        [l setBorderColor:[[UIColor clearColor] CGColor]];
            // to apply set border width.
        [l setBorderWidth:5.0];

        return cell;
    }else{
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
        }
        cell.textLabel.text = [NSString stringWithFormat: @"cell %i",row];
cell.delegate = self;
cell.indexpath = indexpath;
        return cell;

    }
    return nil;
}

另外,不要忘记创建Customcell.xib并通过界面构建​​器添加工具栏 还可以在tableview类中创建CustomCell的插座并按上面的方式处理它