Как безоговорочно поместить зеленый значок «Добавить» в строку «Вставить» - PullRequest
5 голосов
/ 23 июня 2011

У меня есть UITableView со специальной строкой в ​​конце, чтобы вставить новый элемент. Это работает, но я хочу, чтобы он имел зеленый значок плюс, не переводя представление таблицы в режим редактирования. Как я могу это сделать?

Я бы предпочел не создавать кнопку или связывать изображение, если это возможно. Есть ли способ сделать одну или обе из этих вещей, используя только стандартные функции UITableView / UITableViewCell?

Ответы [ 3 ]

2 голосов
/ 23 июня 2011

вы хотите установить 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)

1 голос
/ 23 июня 2011

Вы можете реализовать свою последнюю ячейку как пользовательскую ячейку и добавить зеленый значок по вашему выбору.

См. Учебник по реализации пользовательской ячейки.

Учебник по программированию для iPhone: Часть 6. Создание пользовательского UITableViewCell с помощью Interface Builder UITableView

Изменено:

Допустим, ячейка является экземпляром UITabelViewCell.

Сначала создайте кнопку, используя зеленый значок.

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: метода для получения клика на вас, добавить зеленую иконку

-(void) GreenIconButtonClicked:(id) sender
{

}
0 голосов
/ 23 июня 2011

К сожалению, я нашел единственный способ сделать это - установить изображение ячейки, а это значит, что вы должны сами обрабатывать файлы изображений, а не загружать их UIKit. Я рекомендую использовать UIKit Artwork Extractor для получения изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...