Подтвердить что ты не робот

Как настроить изображение раскрытия аксессуаров в UITableViewCell?

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

4b9b3361

Ответ 1

Вам нужно создать собственное представление и присвоить его свойству accessoryView объекта UITableViewCell. Что-то вроде:

myCell.accessoryView = [[ UIImageView alloc ] 
                       initWithImage:[UIImage imageNamed:@"Something" ]];

Ответ 2

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

    UIImage *indicatorImage = [UIImage imageNamed:@"Arrow.png"];
    cell.accessoryView =[[[UIImageView alloc]  initWithImage:indicatorImage] autorelease];


    return cell;
}

Хорошо, я делаю это с помощью приведенного выше кода справки

Ответ 3

Я столкнулся с той же проблемой, что и Грег - аксессуар не отслеживает (если вы используете UIImageView)

Я решил это так:

UIImage * image = [ UIImage imageNamed:@"disclosure-button-grey.png" ] ;
UIControl * c = [ [ UIControl alloc ] initWithFrame:(CGRect){ CGPointZero, image.size } ] ;

c.layer.contents = (id)image.CGImage ;
[ c addTarget:self action:@selector( accessoryTapped: ) forControlEvents:UIControlEventTouchUpInside ] ;
cell.accessoryView = c ;
[ c release ] ;

Ответ 4

Существует хороший пример из Apple, в котором показано, как использовать UIControl для выполнения такой настройки аксессуаров.

Переопределение - (void)drawRect:(CGRect)rect в UIControl - это не самый простой способ, но дает вам большую гибкость для создания приятных аксессуаров.

enter image description here

Ответ 5

Я бы сделал это следующим образом:

UIImageView *chevronImgVw = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chevron_accessory_vw_img.png"]];
chevronImgVw.frame = CGRectMake(cell.accessoryView.frame.origin.x, cell.accessoryView.frame.origin.y, 10, 20);
cell.accessoryView = chevronImgVw;

Пожалуйста, попробуйте это, прежде чем проголосовать! Потому что на данный момент у него есть 2 upvotes и 2 downvotes!

Ответ 6

Свифт 4 и 5:

Это сработало для меня:

class MyCell: UITableViewCell {

// boilerplate...

    fileprivate func commonInit() {
        // This is the button we want, just need to change the image.
        accessoryType = .detailButton
    }

    open override func layoutSubviews() {
        super.layoutSubviews()
        // Grab the "detail" button to change its icon. Functionality is set in the delegate.
        if let submitButton = allSubviews.compactMap({ $0 as? UIButton }).first {
            submitButton.setImage(#imageLiteral(resourceName: "icons8-enter-1"), for: .normal)
        }
    }

   // everything else...
}

Лучше всего, это позволяет мне использовать tableView (_: accessoryButtonTappedForRowWith :) для обработки действий кнопки.

Ответ 7

ПРИМЕЧАНИЕ. НЕ устанавливайте специальную ячейку для тега: 0. Этот тег зарезервирован для представления textLabel. Если вы установите теги в Xcode Storyboard, , вы должны установить теги для пользовательских представлений/ярлыков на 1 или выше.

Примечание. Пример Apple:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];

    UILabel *label;

    label = (UILabel *)[cell viewWithTag:1];
    label.text = [NSString stringWithFormat:@"%d", indexPath.row];

    label = (UILabel *)[cell viewWithTag:2];
    label.text = [NSString stringWithFormat:@"%d", NUMBER_OF_ROWS - indexPath.row];

    return cell;
}

Ответ 8

Я попробовал вышеуказанный код, и он больше не работает, возможно, из-за возраста этого сообщения, поэтому я сброшу свою линию, которая предоставила мне индивидуальный вид аксессуаров.

[cell setAccessoryView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrowBtn"]]];

Надеюсь, что кто-то найдет это полезным.