UITableView добавя икона към UITableViewRowAction, SavePearlHarbor

Още едно копие на пристанището

Главно меню

Навигация на публикации

UITableView: добавете икона към UITableViewRowAction

iOS SDK ни дава две опции веднага, за да персонализираме бутона, който ще се показва, когато UITableViewCell се премести наляво.

икона

Първата опция, налична от първите версии до наши дни, не е много привлекателна за обикновените бутони, тъй като е предназначена специално за "опасни" действия, тъй като фонът е боядисан в червено от системата и не може лесно да се промени чрез публичния API.

Втората опция, налична от iOS 8, е по-привлекателна, тъй като е възможно да се определи стилът на бутона (Destructive, Normal), както и, ако е необходимо, да се зададе конкретен цвят на фона чрезbackgroundColor.

Нито първата, нито втората опция позволяват да зададете икона, което е доста неприятно. Но все пак ще се опитаме да направим нещо.

UITableViewRowAction изглежда по-богат за персонализиране. Нека се опитаме да му дадемbackgroundColorсpatternImage:

uitableviewrowaction

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

Тъй катоpatternImageе проектиран да се повтаря, нека се опитаме да увеличим самия шаблон, така че да се повтаря по-малък - нека създадем шаблон, който да пасне на бутона:

uitableviewrowaction

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

добавя

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

добавя

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

Между другото, този елемент не обработва сам кликванията, така че те безопасно се изпращат доUITableViewRowAction.handler.

uitableview

Изглежда, че сега всичко изглежда страхотно.

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

Това обаче ми изглежда по-хубаво от обичайния подход за вграждане на бутон в самата клетка с обработка на жестове, тъй като логиката става по-сложна.

Може би има още по-кратък начин да постигнете това, което искате, но все още не знам за това.