github地址 : https://github.com/Darren-chenchen/PopAlert
效果圖
使用方式
1.展示標題、內容、左右按鈕
PopViewUtil.alert(title: "提水", message: "服務失敗失敗", leftTitle: "取消", rightTitle: "確定", leftHandler: {
print("左")
}, rightHandler: {
print("右")
})
2.展示內容,左右按鈕
PopViewUtil.alert(message: "服務器登服務器登服務器登錄失敗錄失敗服務器登錄失敗錄失敗服務器登錄失敗錄失敗服務器登錄失敗錄失敗服務器登錄失敗錄失敗服務器登錄失敗錄失敗服務器登錄失敗錄失敗錄失敗錄失敗", leftTitle: "取消", rightTitle: "確定", leftHandler: {
print("左")
}, rightHandler: {
print("右")
})
3.展示一個按鈕
方式1
PopViewUtil.alert(message: "測試左邊按鈕置爲空", leftTitle: "", rightTitle: "確定", leftHandler: {
print("左")
}, rightHandler: {
print("右")
})
方式2
PopViewUtil.alert(message: "測試右邊按鈕置爲空", leftTitle: "確定", rightTitle: "", leftHandler: {
print("左")
}, rightHandler: {
print("右")
})
4.展示純文本提示框(toast)
// 默認展示在window上,默認2秒消失
PopViewUtil.showMessage(msg: "展示純文本,在window上默認2s")
// 展示在指定view上默認2秒
PopViewUtil.showMessage(msg: "", onView: self.view)
// 以上2個方法應該是足夠滿足項目需求了,下面這個方法比較長,主要是把所有的擴展都放在裏面了,對於特定的需求可以用下面的方法展示,
PopViewUtil.showMessage(msg: "展示純文本,在指定view上。指定3s", success: nil, inView: self.view, duration: 13)
5.帶有圖片的提示框
PopViewUtil.showMessage(msg: "展示有圖片的成功消息,默認在window上,默認2s", success: true, inView: nil, duration: nil)
PopViewUtil.showMessage(msg: "展示有圖片的失敗消息,在指定view上,指定3s", success: false, inView: self.view, duration: 3)
對於控件的詳細描述
1.對於alert彈框:
缺點:該彈框控件適用於全局的設置彈框的需求,比如:如果UI需求是多樣化的,即有的界面左邊按鈕的顏色是黑色,右邊是紅色,有的頁面左邊是綠色右邊是藍色,那麼就需要對方法進行擴展,把color傳遞進去。
優勢:如果樣式是全局的,那麼到指定的xib文件中去修改樣式就好了,不需要關心過多的佈局
修改alert的寬度:
// 寬度的設置要在layoutIfNeeded方法之前
self.nomalView.hd_width = 100
// 賦值後注意重新佈局一下,不然如果xib中lable沒有設置文字,view的尺寸會不對
self.nomalView.layoutIfNeeded()
2.對於toast
2-1、toast支持展示在任意的view上,默認展示在window上,默認顯示時間2s,由於展示在window上時界面切換了,提示信息還存在,所以就將toast擴展到可以放在指定view上。
2-2、toast的結構
可以在HDToast文件中修改字體大小、文本框的最小寬度、默認時長、禁止動畫、文本框內間距等。
2-3、關於toast的動畫:如果禁止動畫效果直接將 self.textToastView?.layer.add(shakeAnimation, forKey: nil)
註釋掉,如果需要再某一個頁面禁止動畫可設置 HDToast.share.animationFromValue = 1
但是要注意一點,由於是單例,所以如果想在某一個界面禁止動畫其餘界面還要打開動畫,就需要再合適的地方設置其爲0.8,不然其他地方的動畫也會消失。
2-4、關於toast的位置注意點:如果toast位置靠近屏幕底部在一些特殊的地方,比如多個文本框(註冊)時容易出現鍵盤遮擋toast的情況,這時可以在適當的時候讓鍵盤退出
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+0.1, execute: {
self.view.endEditing(true)
})