Latest 3.1.0
Homepage https://github.com/omidgolparvar/IDAlert
License MIT
Platforms ios 10.0, requires ARC
Authors

# آی‌دی آلرت ویوکنترلر

## پیش‌نمایش!

## مشکل
زمانیکه توی اپ‌های آی‌او‌اس بخواین از `UIAlertViewController` استفاده کنین، این ویوکنترلر از فونت‌های پیشفرض سیستم‌عامل استفاده می‌کنه. با استفاده از یه سری کد، میشه فونت و رنگ عنوان و پیام بالای کنترلر رو تغییر داد.

اما برای گزینه‌ها یا همون `UIAlertAction`ها، رویه مشخصی برای تغییر رنگ یا فونت نوشته‌ها وجود نداره (یا حداقل من پیدا نکردم!). البته اگه `tintColor` خود `alertController` رو تغییر بدین، رنگ همه گزینه‌ها تغییر می‌کنه. اما مشکل اصلی همون فونت هستش.

## راه حل
برای حل این مشکل، یه سری کلاس جدید پیاده‌سازی کردیم و همینطور یه سری کارای مهندسی‌طور کردیم!!😅 اونجوری دیگه نه تنها فونت، که رنگ و چینش و عکس‌های مربوط به هر اکشن رو میشه شخصی‌سازی کرد. 😎

## مدل‌ها و نحوه استفاده‌شون

### مدل `IDAlertAction`
این مدل در واقع مدل مورد نظر ما برای اکشن‌ها (یا همون گزینه‌های آلرت‌کنترلر) هست.

#### نحوه ساخت
دو مدل اکشن داریم. یکی مدلی که عنوان و عکس (یا دوتا عکس) داره، و البته بهمراه فونت و رنگ و چینش متن. مدل دیگه، مدلی هست که عنوان و توضیح داره فقط. البته می‌تونیم فونت و رنگ براش در نظر بگیریم، ولی عکس نخواهد داشت. این مدل دوم، برای مواقعی هست که شما بخواین در کنار عنوان گزینه‌ها، یه توضیح کوچک هم ارائه بدین؛ تا کاربر مطمئن‌تر بتونه گزینه مورد نظرش رو انتخاب کنه.

برای ساخت مدل اول از کد زیر استفاده می‌کنیم:

static func InitializeNormalAction(
  title       : String,
  alignment   : NSTextAlignment     = .center,
  color       : UIColor?            = nil,
  font        : UIFont?             = nil,
  leftImage   : UIImage?            = nil,
  rightImage  : UIImage?            = nil,
  actionStyle : UIAlertAction.Style = .default,
  handler     : Handler?)

پارامترها بنظرم مشخص هستن و نیازی به توضیح ندارن.

برای ساخت مدل دوم (عنوان و توضیح) از کد زیر استفاده می‌کنیم:

static func InitializeTitleAndSubtitleAction(
  title         : String,
  titleColor    : UIColor?            = nil,
  titleFont     : UIFont?             = nil,
  subtitle      : String,
  subtitleColor : UIColor?            = nil,
  subtitleFont  : UIFont?             = nil,
  actionStyle   : UIAlertAction.Style = .default,
  actionHeight  : CGFloat?            = nil,
  handler       : Handler?)

اینجا هم پارامترها بنظرم مشخص هستن و نیازی به توضیح ندارن.

#### نکته‌ها
👈 توی نسخه‌های قبلی، اول یه اکشن می‌ساختیم و بعد با استفاده از متدها، عکس(ها) یا چینش و غیره رو تغییر می‌دادیم. توی نسخه ۳ دیگه اینجوری نیست؛ و همه‌چی همون اول گرفته میشه. پس بدونین که مدل `IDAlertAction` خودش دیگه متدی برای شخصی‌سازی نداره.

👈 با توجه به اینکه این متدهایی که بعنوان سازنده مورد استفاده قرار می‌گیرن بصورت `static` تعییر شدن، شما باید به شکل زیر فراخوانی‌شون کنین:

let action1 = IDAlertAction.InitializeNormalAction(...)
let action0 = IDAlertAction.InitializeTitleAndSubtitleAction(...)

#### مشخصه‌های کمکی
برای راحتی بیشتر، چندتا متغیر از نوع `static` در نظر گرفته شده، تا بصورت پیشفرض، اگه فونتی برای قسمت‌های مختلف اکشن اختصاص داده نشده بود، از این مقادیر استفاده بشه. شما با یکبار مقداردهی این مشخصه‌ها، تمام آلرت‌اکشن‌ها رو با اون فونت‌ها مشاهده می‌کنین.

public static var TitleTextFont: UIFont = ...
public static var SubtitleTextFont: UIFont = ...

یعنوان مثال می‌تونین مقداردهی این مشخصه‌ها رو توی `AppDelegate` انجام بدین.

### مدل `IDAlertHeader`
این مدل عنوان و پیام آلرت رو پیکربندی می‌کنه.
استفاده‌اش برای مشخص‌کردن `title` و `message` و همینطور مشخص‌کردن فونت و رنگ هرکدوم هست.

#### نحوه ساخت
سازنده بصورت زیر هست:

init(title: String?, message: String?)

اصن نیازی به توضیح هست؟! 🤔

#### متدها
برای شخصی‌سازی هدر دوتا متد در نظر گرفته شده. هر دو رنگ و فونت رو تغییر میدن؛ یکی برای عنوان و یکی هم برای پیام.

setup{Title|Message}(font: UIFont?, color: UIColor?)

#### مشخصه‌های کمکی
اینجا هم یه سری مشخصه بصورت `static` در نظر گرفته شدن، تا هربار نیازی نباشه شما فونت و رنگ عنوان و پیام رو مقداردهی کنین.

static var TitleFont: UIFont = .systemFont(ofSize: 16, weight: .bold)
static var TitleColor : UIColor = .black
static var MessageFont : UIFont = .systemFont(ofSize: 14, weight: .regular)
static var MessageColor : UIColor = .darkGray

یعنوان مثال می‌تونین مقداردهی این مشخصه‌ها رو هم توی `AppDelegate` انجام بدین.

### مدل `IDAlertHeaderView`
با استفاده از این مدل، می‌تونیم بجای نمایش عنوان و پیام، از یه ویو اختصاصی برای هدر آلرت‌کنترلر استفاده کنیم.

#### نحوه ساخت
متدی که برای ساخت استفاده میشه، بصورت زیر تعریف میشه:

init(contentView: UIView, height: CGFloat)

این سازنده، دوتا پارامتر ورودی داره. یکی خود اون ویویی که قرار هست نمایش داده بشه، و یکی هم ارتفاع مورد نیاز ما. نکته‌ای که هست، اینه که این ارتفاع رو جوری در نظر بگیرین که چیزی توی ویو شما از قلم نیوفته!!

### مدل `IDAlertController`
این مدل همون مدلی هست با استفاده ازش، خود `UIAlertController` نمایش داده میشه.

#### نحوه ساخت
براساس نوع استفاده ما، دوتا سازنده داریم:

init(header: IDAlertHeader?, actions: [IDAlertAction], preferredStyle style: UIAlertController.Style)

همونطور که مشخصه، این سازنده، یه `IDAlertHeader` می‌تونه بگیره. اینکه می‌گم میتونه، به این خاطر هست که این ورودی `Optional` هست و اگه شما آلرتی بخواین نمایش بدین که عنوان و پیام نداره، این ورودی رو `nil` قرار می‌دین.

ورودی دوم میشه اکشن‌های مورد نظر شما؛ که رویه ساخت‌شون رو قبل‌تر توضیح دادم.

ورودی سوم هم مشخص‌کننده نوع نمایش آلرت‌کنترلر هست؛ اینکه بصورت `ActionSheet` باشه یا بصورت `Alert`.

و نوع دوم سازنده هم بصورت زیر هست:

init(headerView: IDAlertHeaderView, actions: [IDAlertAction], preferredStyle: UIAlertController.Style)

این سازنده، یه `IDAlertHeaderView` می‌گیره. ورودی دوم میشه اکشن‌های مورد نظر شما؛ که رویه ساخت‌شون رو قبل‌تر توضیح دادم. ورودی سوم هم مشخص‌کننده نوع نمایش آلرت‌کنترلر هست؛ اینکه بصورت `ActionSheet` باشه یا بصورت `Alert`.

#### متدها
دوتا متد در دسترس شماست:

متد برای مقداردهی `tintColor` آلرت‌کنترلر:

setTintColor(_ color: UIColor)

متد زیر هم برای نمایش آلرت‌کنترلر در iPad کاربرد داره:

setupPopoverPresentationController(
  sourceView: UIView, 
  permittedArrowDirections: UIPopoverArrowDirection
)

این متد دوتا ورودی داره. اولی بعنوان ویو (یا المانی) بکار میره که باعث نمایش آلرت‌کنترلر شده. و متد دوم هم برای جهت‌های مجاز نمایش فلش برای آلرت‌کنترلر در آی‌پد بکار میره.

## در آخر
اگه توی استفاده به مشکلی برخورد کردین، بگین تا در صورت امکان رفع‌اش کنیم. 🤓

اگه هم از این خوش‌تون اومد، به بقیه هم معرفی‌اش کنین، تا بقیه هم ازش استفاده کنن؛ و اینجوری مجبور نباشیم برای یه آلرت، یا از فونت پیشفرض استفاده کنیم، یا یه کتابخانه دیگه اضافه کنیم.

## دِ اِند. 😎

Latest podspec

{
    "name": "IDAlert",
    "version": "3.1.0",
    "summary": "IDAlert: u06ccu0647 u0633u0631u06cc u06a9u0627u0631u0627 u0631u0648u06cc u0622u0644u0631u062au200cu06a9u0646u062au0631u0644u0631 u06a9u0631u062fu0645 u06a9u0647 u0627u0633u062au0641u0627u062fu0647u200cu0627u0634 u0631u0648 u0628u0631u0627u06cc u0632u0628u0627u0646 u067eu0627u0631u0633u06cc u0628u0647u062au0631 u0648 u0642u0634u0646u06afu200cu062au0631 u0648 u0628u0647u06ccu0646u0647u200cu062au0631 u06a9u0646u0647.",
    "description": "IDAlert: u06ccu0647 u0633u0631u06cc u06a9u0627u0631u0627 u0631u0648u06cc u0622u0644u0631u062au200cu06a9u0646u062au0631u0644u0631 u06a9u0631u062fu0645 u06a9u0647 u0627u0633u062au0641u0627u062fu0647u200cu0627u0634 u0631u0648 u0628u0631u0627u06cc u0632u0628u0627u0646 u067eu0627u0631u0633u06cc u0628u0647u062au0631 u0648 u0642u0634u0646u06afu200cu062au0631 u0648 u0628u0647u06ccu0646u0647u200cu062au0631 u06a9u0646u0647.",
    "homepage": "https://github.com/omidgolparvar/IDAlert",
    "license": {
        "type": "MIT",
        "file": "LICENSE.md"
    },
    "authors": {
        "Omid Golparvar": "[email protected]"
    },
    "source": {
        "git": "https://github.com/omidgolparvar/IDAlert.git",
        "tag": "3.1.0"
    },
    "swift_version": "4.2",
    "platforms": {
        "ios": "10.0"
    },
    "requires_arc": true,
    "pod_target_xcconfig": {
        "SWIFT_VERSION": "4.2"
    },
    "source_files": "IDAlertController/Sources/*.{h,swift}"
}

Pin It on Pinterest

Share This