Вопрос по objective-c, ios – Замените галочку по умолчанию для UITableView с пользовательским изображением

6

Я хотел бы заменить изображение галочки по умолчанию, которое отображается, когда для аксессуара UITableViewCell установлено значение: UITableViewCellAccessoryCheckmark.

Поэтому я все еще хотел бы написать:

<code>[cell setAccessoryType:UITableViewCellAccessoryCheckmark];
</code>

Но мне бы хотелось, чтобы мое собственное изображение отображалось, а не по умолчанию.

Буду признателен за любую оказанную помощь.

Я думаю, вам нужно создать собственную ячейку и добавить imageView с правой стороны ячейки. Этот imageView будет содержать изображение, которое вы хотите. НаdidSelectRowAtRowAtIndexPath: Вы можете добавить изображение и удалить в зависимости от количества нажатий. Parth Bhatt
Спасибо Парф, это, конечно, один из способов, но я старался переопределить саму галочку. т.е. подкласс UITableViewCell и сказать, если кто-то просит вас галочку, это то, что я хочу, чтобы вы предоставили. faraquet99

Ваш Ответ

3   ответа
4

Способ-1:

Я думаю, ты можешь использовать

Предположим, у вас есть кнопка UIB с изображением галочки.

OncellForRowAtIndexPath:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
CGRect frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
button.frame = frame;
[button setBackgroundImage:image forState:UIControlStateNormal];

[button addTarget:self action:@selector(checkButtonTapped:event:)  forControlEvents:UIControlEventTouchUpInside];
button.backgroundColor = [UIColor clearColor];
cell.accessoryView = button;

checkButtonTapped: событие: Метод:

- (void)checkButtonTapped:(id)sender event:(id)event
{
    NSSet *touches = [event allTouches];
    UITouch *touch = [touches anyObject];
    CGPoint currentTouchPosition = [touch locationInView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
    if (indexPath != nil)
    {
        [self tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath];
    }
}

accessoryButtonTappedForRowWithIndexPath: Метод

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    NSMutableDictionary *item = [dataArray objectAtIndex:indexPath.row];

    BOOL checked = [[item objectForKey:@"checked"] boolValue];

    [item setObject:[NSNumber numberWithBool:!checked] forKey:@"checked"];

    UITableViewCell *cell = [item objectForKey:@"cell"];
    UIButton *button = (UIButton *)cell.accessoryView;

    UIImage *newImage = (checked) ? [UIImage imageNamed:@"unchecked.png"] : [UIImage imageNamed:@"checked.png"];
    [button setBackgroundImage:newImage forState:UIControlStateNormal];
}

Я взял приведенный выше код по этой ссылке:

Реализация пользовательского представления аксессуаров для UITableView в iPhone

Способ-2:

Также есть способ сделать это с помощью пользовательской ячейки tableView.

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

Это imageView будет содержать изображение, которое вы хотите.

On didSelectRowAtRowAtIndexPath: вы можете добавить изображение и удалить его в зависимости от количества нажатий.

Дай мне знать, если тебе нужна дополнительная помощь.

Надеюсь это поможет

26
Это то, что я преследовал. Большое спасибо faraquet99
Большое спасибо. @ Парт Бхатт Arpit B Parekh
2

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
...
    NSMutableDictionary *item = [dataArray bjectAtIndex:indexPath.row];
    cell.textLabel.text = [item objectForKey:@"text"];

    [item setObject:cell forKey:@"cell"];

    BOOL checked = [[item objectForKey:@"checked"] boolValue];
    UIImage *image = (checked) ? [UIImage imageNamed:@"checked.png"] : [UIImage imageNamed:@"unchecked.png"];

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    CGRect frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    button.frame = frame;
    [button setBackgroundImage:image forState:UIControlStateNormal];

    [button addTarget:self action:@selector(checkButtonTapped:event:)  forControlEvents:UIControlEventTouchUpInside];
    button.backgroundColor = [UIColor clearColor];
    cell.accessoryView = button;
    ...
}

    - (void)checkButtonTapped:(id)sender event:(id)event {
       NSSet *touches = [event allTouches];
       UITouch *touch = [touches anyObject];
       CGPoint currentTouchPosition = [touch locationInView:self.tableView];
       NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint: currentTouchPosition];
       if (indexPath != nil) {
          [self tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath];
       }
    }

    - (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
       NSMutableDictionary *item = [dataArray objectAtIndex:indexPath.row];

       BOOL checked = [[item objectForKey:@"checked"] boolValue];

       [item setObject:[NSNumber numberWithBool:!checked] forKey:@"checked"];

       UITableViewCell *cell = [item objectForKey:@"cell"];
       UIButton *button = (UIButton *)cell.accessoryView;

       UIImage *newImage = (checked) ? [UIImage imageNamed:@"unchecked.png"] : [UIImage imageNamed:@"checked.png"];
       [button setBackgroundImage:newImage forState:UIControlStateNormal];
    }

ссылк

Я думаю, что только публикация ссылки бесполезна. Я думаю, что этот ответ будет бесполезен, если ссылка не работает. Parth Bhatt
Боюсь, я на работе, и тогда мне показалось полезным хотя бы опубликовать ссылку. Извините за краткость моего ответа; -P WhiteTiger

Похожие вопросы