خود آیاواس یه DatePicker داره که میشه Locale و Calendar رو براش به بطوری تنظیم کرد تا باهاش بتونیم یه تاریخ پارسی انتخاب کنیم. اما شخصا بنظرم زیاد جالب نبود؛ چون با استفاده از اون:
- هربار فقط میشه یک تاریخ رو انتخاب کرد.
- از فونت پیشفرض خود سیستم عامل استفاده میکنه.
- خوشگل نیست.
برای همین تصمیم گرفتم یه چیزی پیادهسازی کنم تا این ویژگیها/ایرادات رو نداشته باشه. چندتا عکس هم ازش قرار دادم، تا بتونین یه نگاهی (قبل از استفاده) بهش بندازین.
برای نصب میتونین از Cocoapod
استفاده کنین. عبارت مورد استفاده برای نصب هم اینه:
pod 'IDPersianDatePicker'
👈 توجه داشته باشین که زبان مورد استفاده توی این پروژه سوییفت نسخه ۴.۲ بوده.
اولین قدم اینه که ایمپورتش کنین:
import IDPersianDatePicker
مرحله بعد اینه که ویوکنترلر شما یه پروتکل رو پیادهسازی کنه. پروتکلی که باید پیادهسازی کنه PersianDatePickerDelegate
هست. وظیفه این پروتکل آماده کردن دادهها و مشخصههای مورد استفاده در انتخابگر هست.
متدها و مشخصههایی که داره بصورت زیر هست:
- متد
persianDatePicker(canSelectDate date: Date)
و خروجی از نوعBool
با استفاده از این متد میتونین از انتخاب یه سری روزها جلوگیری کنین.
- متد
persianDatePicker(didSelectDates dates: [Date])
زمانیکه که کاربر روی دکمه انتخاب بزنه، روزهایی که انتخاب شده، با استفاده از این متد در دسترس خواهند بود.
برای فراخوانی و نمایش انتخابگر هم بصورت زیر عمل میکنیم:
PersianDatePicker.Present(
sourceController : UIViewController,
configuration : PersianDatePicker.Configuration,
delegate : PersianDatePickerDelegate,
completion : (() -> Void)?
)
توی این نسخه، تنظیمات مورد نیاز انتخابگر رو از delegate
جدا کردم. الان موقع نمایش باید تنظیمات مورد نیاز رو بسازین و ارجاع بدین. این تنظیمات به چند بخش اصلی تقسیم میشن:
var font: UIFont = .systemFont(ofSize: 16, weight: .regular)
- فونت مورد استفاده رو مشخص میکنه.
var selectedDayTextColor: UIColor = .black
- رنگ مورد استفاده برای متن المانهای انتخابشده رو مشخص میکنه.
var selectedDayBackgroundColor: UIColor = /* a_beautiful_color */
- رنگ مورد استفاده برای پسزمینه المانهای انتخابشده رو مشخص میکنه.
var title: String = "تاریخ مورد نظر خود را انتخاب نمایید"
- عنوان مورد نظر برای نمایش.
var message: String? = nil
- توضیح مورد نظر برای نمایش.
var minimumDate: Date
var maximumDate: Date
- اینها تاریخ کمینه و بیشینه رو توی تقویم مشخص میکنن.
var canSelectMultipleDates: Bool = false
- این مشخصه بیانگر اینه که آیا میشه چندین تاریخ رو انتخاب کرد، یا فقط مجاز به انتخاب یک تاریخ هست.
- مقدار پیشفرض این مشخصه برابر
false
هست.
var preselectedDates: [Date] = []
- این مشخصه، تاریخهایی رو مشخص میکنه که بصورت پیشفرض انتخابشده هستن.
- اگه این مشخصه خالی نباشه، بصورت پیشفرض صفحهای به کاربر نمایش داده میشه، که کوچکترین تاریخ انتخابشده داخلاش باشه.
var defaultDay: Date? = nil
- این مشخصه، تاریخ پیشفرض تقویم برای نمایش هست. یعنی اگر این مشخصه مقدار داشته باشه، صفحهای از تقویم بطور پیشفرض نمایش داده میشه که این تاریخ داخلاش باشه.
- مقدار پیشفرض این مشخصه برابر
nil
هست. - زمانیکه تاریخ از پیش تعیینشدهای نداشته باشیم، و این مشخصه هم مقدار نداشته باشه، بصورت پیشفرض صفحه اول مجاز تقویم به کاربر نمایش داده میشه؛ یعنی صفحهای که
minimumDate
داخلاش هست. - برای تنظیم صفحه پیشفرض تقویم، بررسی این مشخصه اولویت بالاتری نسبت به
preselectedDates
دارد.
- 👀 اگه ایرادی توی روند پیادهسازی یا استفاده مشاهده کردین، حتما بگین تا رفعش کنیم.
- 🤝 اگه قابلیت خاصی به ذهنتون رسید که میتونست به بهتر شدن این پروژه کمک کنه، حتمن بگین؛ شاید با کمک هدیگه پیادهسازیاش کردیم.
- 😋 تنکیوووووو.