Как я могу настроить изображение раскрытия аксессуара в UITableViewCell? - PullRequest
50 голосов
/ 31 декабря 2008

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

Ответы [ 7 ]

121 голосов
/ 31 декабря 2008

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

myCell.accessoryView = [[ UIImageView alloc ] 
                       initWithImage:[UIImage imageNamed:@"Something" ]];
9 голосов
/ 20 августа 2010
- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

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


    return cell;
}

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

7 голосов
/ 08 января 2010

Я столкнулся с той же проблемой, что и Грег - вспомогательное представление не отслеживается (если вы используете 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 ] ;
0 голосов
/ 14 января 2015

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

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

enter image description here

0 голосов
/ 28 июля 2014

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

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

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

0 голосов
/ 02 марта 2014

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

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 и 2 отрицательных голоса!

0 голосов
/ 13 февраля 2013

ПРИМЕЧАНИЕ: НЕ устанавливайте пользовательскую ячейку в тег: 0. Этот тег зарезервирован для представления textLabel. Если вы устанавливаете теги в Storyboard Xcode, , вы должны установить теги для пользовательских представлений / меток на 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...