如何制作这种徽章?

时间:2011-02-12 02:03:20

标签: objective-c ios uitableview

我勾画了这个原型:http://dl.dropbox.com/u/3630641/3-%20Todolist%20Main.jpg

左边的数字是项目优先级,列表是可重新订购的,因此值会发生变化。如何创建这些左侧徽章?如果可能,我更喜欢代码方法,而不是PNG图像。

更新

请你看一下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    CGRect priorityLabelRect = CGRectMake(10, 5, 20, 30);
    UILabel *priorityLabel = [[UILabel alloc] initWithFrame:priorityLabelRect];
    priorityLabel.layer.cornerRadius = 5.0f;
    priorityLabel.layer.backgroundColor = [[UIColor grayColor] CGColor];
    priorityLabel.tag = kPriorityValueTag;
    [cell.contentView addSubview:priorityLabel];
    [priorityLabel release];

    CGRect meatLabelRect = CGRectMake(80, 5, 300, 30);
    UILabel *meatLabel = [[UILabel alloc] initWithFrame:meatLabelRect];
    meatLabel.tag = kMeatValueTag;
    [cell.contentView addSubview:meatLabel];
    [meatLabel release];

    cell.showsReorderControl = YES;
}

// Configure the cell.
[self configureCell:cell atIndexPath:indexPath];

return cell;
}

但优先级周围没有显示灰色区域 如果我添加一个新的灰色区域,优先级周围会出现不到一秒的灰色区域,但它会立即消失。更不用说优先级值不位于灰色区域的中心。

知道我做错了吗?

3 个答案:

答案 0 :(得分:3)

向单元格添加UILabel并根据自己的喜好对其进行格式化。对于圆角,请设置label.layer.cornerRadius

答案 1 :(得分:2)

  1. 为徽章创建UIView。
  2. 看这里它将解释如何画出你想要徽章的样子。并绘制数字: http://www.techotopia.com/index.php/An_iPhone_Graphics_Drawing_Tutorial_using_Quartz_2D

  3. 创建一个将接收单元格编号并在单元格中绘制的变量。

  4. 应该看起来像那样 -

    - (void)drawRect:(CGRect)rect {
    
            CGContextRef context = UIGraphicsGetCurrentContext();
    
            CGContextSetLineWidth(context, 2.0);
            CGContextSetStrokeColorWithColor(context, [UIColor blueColor].CGColor);
            CGRect rectangle = CGRectMake(10,10,40,40);
            CGContextAddRect(context, rectangle);
            CGContextStrokePath(context);
            CGContextSetFillColorWithColor(context, [UIColor grayColor].CGColor);
            CGContextFillRect(context, rectangle);
            CGPoint point =CGPointMake(20,20);
            [self.cellNumber drawAtPoint:point withFont:font];
    
    }
    

    4将BadgeView添加到您的单元格,并在CellForRawAtIndexPath中将该数字传递给徽章视图。

    祝你好运

答案 2 :(得分:0)

您可以进行组合控制。它是一个UIImageView,带有UIImage和UILabel作为子视图。

一个常规对象,其UIImageView.image带有灰色矩形,然后是UILabel,用于白色数字。然后只需更改标签文本的值。

如果你从UIImageView和子类开始,你可以直接将它直接粘贴到常规UITableViewCells,因为它们已经有了一个UIImageView的空间。