UITableView добавя икона към UITableViewRowAction, SavePearlHarbor
Още едно копие на пристанището
Главно меню
Навигация на публикации
UITableView: добавете икона към UITableViewRowAction
iOS SDK ни дава две опции веднага, за да персонализираме бутона, който ще се показва, когато UITableViewCell се премести наляво.

Първата опция, налична от първите версии до наши дни, не е много привлекателна за обикновените бутони, тъй като е предназначена специално за "опасни" действия, тъй като фонът е боядисан в червено от системата и не може лесно да се промени чрез публичния API.
Втората опция, налична от iOS 8, е по-привлекателна, тъй като е възможно да се определи стилът на бутона (Destructive, Normal), както и, ако е необходимо, да се зададе конкретен цвят на фона чрезbackgroundColor.
Нито първата, нито втората опция позволяват да зададете икона, което е доста неприятно. Но все пак ще се опитаме да направим нещо.
UITableViewRowAction изглежда по-богат за персонализиране. Нека се опитаме да му дадемbackgroundColorсpatternImage:

Резултатът е очаквано крив, но поне получихме иконка на бутона. Нека оставим проблема с цвета на фона и текста за по-късно, първо ще се опитаме да персонализираме самата икона.
Тъй катоpatternImageе проектиран да се повтаря, нека се опитаме да увеличим самия шаблон, така че да се повтаря по-малък - нека създадем шаблон, който да пасне на бутона:

Сега изглежда много по-добре. Но ако например полето се окаже многоредово и след това клетката се простира на височина, тогава няма да е много приятно:

Нека се опитаме да го направим по различен начин. Какво се случва, когато преместим линия наляво? Точно така, тя просто тръгва наляво, излагайки това, което е по-долу в йерархията: бутона. Да опитамедобавете слой отгоре, който ще бъде изрязан до десния край на клетката (компонент PureLayout за помощ за бързо внедряване).

Сега резултатът е много по-добър, въпреки че има еднонов този подход: ширината на отместването на клетката се определя от текста в UITableViewRowAction.title. Съответно ще трябва да коригирате видимата част на бутона с този параметър. Като опция, попълнете го с интервали, съответстващи на желаната ширина, или добавете нещо в началото или края.
Между другото, този елемент не обработва сам кликванията, така че те безопасно се изпращат доUITableViewRowAction.handler.

Изглежда, че сега всичко изглежда страхотно.
В резултат на това има две, нос този подход: - ширината на преместване се определя отделно от параметъра UITableViewRowAction.title - не можете да направите повече от един бутон или ще трябва да ги натиснете всички в техния собствен слой и да вмъкнете вашите бутони там
Това обаче ми изглежда по-хубаво от обичайния подход за вграждане на бутон в самата клетка с обработка на жестове, тъй като логиката става по-сложна.
Може би има още по-кратък начин да постигнете това, което искате, но все още не знам за това.