如何无条件地将绿色添加图标放在插入行上

Posted

技术标签:

【中文标题】如何无条件地将绿色添加图标放在插入行上【英文标题】:How to put the green Add icon unconditionally on the Insert row 【发布时间】:2011-06-23 05:35:28 【问题描述】:

我有一个 UITableView,最后有一个特殊的行来插入一个新项目。这可行,但我希望它具有绿色加号图标,而不必将表格视图置于编辑模式。我该怎么做?

如果可能,我不希望创建按钮或捆绑图像。有没有办法只使用标准的 UITableView/UITableViewCell 功能来做这两个或两个?

【问题讨论】:

这是一个普通的 UITableViewCell。 您的意思是您不希望表格视图处于编辑模式,还是不希望用户必须将其置于编辑模式?以编程方式将您的表格视图设置为始终处于编辑模式是否符合您的目的? @bshirley:用户可以使用编辑模式,但除非在编辑模式下可以点击行,否则无法永久打开编辑。 【参考方案1】:

您想将accessoryView 设置为单元格:

@interface RootViewController : UITableViewController 
  NSInteger nextValue;
  NSMutableArray *timeIntervals;



@implementation RootViewController


- (NSNumber *)nextValue 
  NSNumber *n = [NSNumber numberWithInteger:nextValue];
  nextValue++;
  return n;


- (void)viewDidLoad 
  [super viewDidLoad];
  nextValue = 1;
  timeIntervals = [[NSMutableArray alloc] init];
  [timeIntervals addObject:[self nextValue]];


- (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section 
  return [timeIntervals count];


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

    static NSString *CellIdentifier = @"TimeIntervalCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                                       reuseIdentifier:CellIdentifier] autorelease];
      UIButton *b = [UIButton buttonWithType:UIButtonTypeContactAdd];
      [b addTarget:self action:@selector(addTapped:) forControlEvents:UIControlEventTouchUpInside];
      cell.accessoryView = b;
    

  NSNumber *number = [timeIntervals objectAtIndex:indexPath.row];
  cell.accessoryView.tag = indexPath.row;
  cell.textLabel.text = [number stringValue];
  cell.detailTextLabel.text = @"detail about this number";
  return cell;


- (void)addTapped:(UIButton *)sender 
  id cell = sender;
  while (cell != nil && [cell isKindOfClass:[UITableViewCell class]] == NO)
    cell = [cell superview];

  if (cell == nil) 
    NSLog(@"[%@ %@] sender was not in a cell", 
          NSStringFromClass([self class]), NSStringFromSelector(_cmd));
    return;
  

  NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
  NSInteger index = indexPath.row + 1; // insert after current cell
  [timeIntervals insertObject:[self nextValue] atIndex:index];
  NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:index inSection:0];
  [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
                        withRowAnimation:UITableViewRowAnimationFade];



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

  NSLog(@"[%@ %@] not implemented", NSStringFromClass([self class]), NSStringFromSelector(_cmd));



@end

(这是对 Xcode 4.0.2 导航应用模板的所有修改代码)

【讨论】:

【参考方案2】:

您可以将最后一个单元格实现为自定义单元格,并根据您的选择添加绿色图标。

请参阅教程以实现自定义单元格。

iPhone Programming Tutorial: Part 6: Creating custom UITableViewCell Using Interface Builder UITableView

更新:

假设 cellUITabelViewCell 的实例。

首先使用您的绿色图标创建一个按钮。

UIButton myGreenIconButton = [UIButton buttonWithType:UIButtonTypeCustom];
[myGreenIconButton addTarget:self action:@selector(GreenIconButtonClicked:)forControlEvents:UIControlEventTouchUpInside];
[myGreenIconButton setBackgroundImage:[UIImage imageNamed:@"greenIcon.png"] forState:UIControlStateNormal];
myGreenIconButton.tag = i;
myGreenIconButton.backgroundColor = [UIColor clearColor];
myGreenIconButton.frame = CGRectMake(5, 78, 15, 15);

现在将其作为子视图添加到您的最后一个 UITabelViewCell

[cell addSubview:myGreenIconButton];

实现GreenIconButtonClicked:方法来接收点击evrnt你添加绿色图标按钮

-(void) GreenIconButtonClicked:(id) sender



【讨论】:

@Peter Hosey:您可以在您的UITabelView 中添加一个带有UIButton 的绿色图标包作为subview【参考方案3】:

不幸的是,我发现这样做的唯一方法是设置单元格的图像,这意味着您必须自己处理图像文件,而不是让 UIKit 为您加载它们。我建议使用UIKit Artwork Extractor 来获取图像。

【讨论】:

以上是关于如何无条件地将绿色添加图标放在插入行上的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地将小部件添加到列表中?

如何正确地将 ImagePicker 插入标题中的图像? SwiftUI

Thymeleaf - 如何有条件地将选中的属性添加到输入

如何有条件地将前导零添加到一列数字?

如何根据另一个组件的存在有条件地将类添加到 Magnolia 组件模板?

如何防止 qmake 在链接器命令行上添加控制台子系统?