Как я могу настроить изображение раскрытия аксессуаров в UITableViewCell?
-
03-07-2019 - |
Вопрос
Я хотел бы использовать пользовательскую версию стандартного изображения аксессуара для раскрытия информации в моем UITableView.Как я могу это сделать?Я надеюсь, что подкласс UITableViewCell не является необходимым для чего-то такого базового.
Решение
Вам нужно будет создать пользовательское представление и назначить его accessoryView
собственность компании UITableViewCell
объект.Что -то вроде:
myCell.accessoryView = [[ UIImageView alloc ]
initWithImage:[UIImage imageNamed:@"Something" ]];
Другие советы
- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UIImage *indicatorImage = [UIImage imageNamed:@"Arrow.png"];
cell.accessoryView =[[[UIImageView alloc] initWithImage:indicatorImage] autorelease];
return cell;
}
ну, я делаю это с помощью кода справки, приведенного выше
Я столкнулся с той же проблемой, что и Грег - представление аксессуаров не отслеживается (если вы используете 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 ] ;
Существует хороший пример из Apple показываю, как использовать UIControl
для выполнения такого рода настройки accessoryView.
Переопределяющий - (void)drawRect:(CGRect)rect
в UIControl это не самый простой способ, но он дает вам большую гибкость при создании красивых видов аксессуаров.
Я бы сделал это следующим образом:
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 отрицательных голоса!
Я попробовал приведенный выше код, и, похоже, он больше не работает, возможно, из-за возраста этого поста, поэтому я приведу свою строку, которая предоставила мне настраиваемый вид аксессуаров.
[cell setAccessoryView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrowBtn"]]];
Надеюсь, кто-нибудь сочтет это полезным.
ПРИМЕЧАНИЕ:НЕ устанавливайте в пользовательской ячейке значение тега:0.Этот тег зарезервирован для представления textLabel.Если вы задаете теги в раскадровке 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;
}