Swift.自定制選擇商品數(shù)量View

效果圖

實(shí)現(xiàn)效果:

  • frame可自定義,進(jìn)行了適配.注意點(diǎn)在于為了保證顯示效果,view.height不能小于view.width/3.
  • 可在init方法中設(shè)定默認(rèn)顯示數(shù)字,以及最大可選數(shù)字.
  • 通過(guò)block進(jìn)行點(diǎn)擊加減按鈕的方法回調(diào)
  • 可直接調(diào)用只讀屬性來(lái)獲取當(dāng)前顯示數(shù)字.

實(shí)現(xiàn)方式:

  1. 添加subView,左側(cè)button,中間顯示Label,右側(cè)button.并且為左右button設(shè)定可點(diǎn)狀態(tài)和不可點(diǎn)狀態(tài).

  2. 添加顯示數(shù)字屬性以及最大可選數(shù)屬性.

  3. 重寫init方法實(shí)現(xiàn)適配,設(shè)定view.height不能小于view.width/3

  4. 添加block回調(diào).


1.添加subView,左側(cè)button,中間顯示Label,右側(cè)button.并且為左右button設(shè)定可點(diǎn)狀態(tài)和不可點(diǎn)狀態(tài).

  /// 左側(cè)減按鈕
    private let subtractButton: UIButton = {
        let button = UIButton()
        button.isEnabled = false
        button.tag = 0
        button.setBackgroundImage(UIImage(named: "selectNumber_subtractIsEnableTrue"), for: .normal)
        button.setBackgroundImage(UIImage(named: "selectNumber_subtractIsEnableFalse"), for: .disabled)
        return button
    }()
    /// 中間顯示label
    private lazy var showLabel: UILabel = {
        let label = UILabel()
        label.backgroundColor = UIColor(red: 246/255, green: 246/255, blue: 246/255, alpha: 1)
        label.textColor = UIColor(red: 51/255, green: 51/255, blue: 51/255, alpha: 1)
        label.text = "\(_selectedNumber)"
        label.font = UIFont.systemFont(ofSize: 13)
        label.textAlignment = .center
        return label
    }()
    /// 右側(cè)加按鈕
    private let addButton: UIButton = {
        let button = UIButton()
        button.tag = 1
        button.setBackgroundImage(UIImage(named: "selectNumber_addEnableTrue"), for: .normal)
        button.setBackgroundImage(UIImage(named: "selectNumber_addEnableFalse"), for: .disabled)
        return button
    }()

2.添加顯示數(shù)字屬性以及最大可選數(shù)屬性.

 /// 最大顯示數(shù),可以通過(guò)初始化設(shè)置
    private var maxSelectNumber: Int = 99
    /// 選擇數(shù)量,private,外部不可調(diào)用
    private var _selectedNumber: Int = 1{
        /// 當(dāng)選擇數(shù)量修改時(shí)進(jìn)行顯示label的文字修改,以及加減按鈕的狀態(tài)修改.
        didSet{
            self.subtractButton.isEnabled = _selectedNumber == 1 ? false : true
            self.addButton.isEnabled = _selectedNumber == maxSelectNumber ? false : true
            self.showLabel.text = "\(_selectedNumber)"
        }
    }
    /// 外部調(diào)用當(dāng)前顯示數(shù)量,只讀,不可修改.防止異常
    public var selectedNumber: Int{
        get {
            return _selectedNumber
        }
    }

3.重寫init方法實(shí)現(xiàn)適配,設(shè)定view.height不能小于view.width/3

  init(frame: CGRect, defaultNumber: Int = 1, maxNumber: Int = 99){
        /// 加入frame限制,保證按鈕size小于view.width*1/3,保證顯示效果
        let frame = CGRect(x: frame.origin.x, y: frame.origin.y, width: frame.width, height: frame.height < frame.width/3 ? frame.height : frame.width/3)
        super.init(frame: frame)
        self.maxSelectNumber = maxNumber
        self.setValue(defaultNumber, forUndefinedKey: "selectedNumber")
        drawMyView()
    }

4.添加block回調(diào).

    /// 修改數(shù)量回調(diào),減回調(diào)false,加回調(diào)true
    public var backEditNumber: ((Bool) -> ())?
    /// 點(diǎn)擊加減按鈕
    @objc private func onClickChangeButton(sender: UIButton) {
        switch sender.tag {
        case 0:
            self._selectedNumber -= 1
            if backEditNumber != nil {
                backEditNumber!(false)
            }
        case 1:
            self._selectedNumber += 1
            if backEditNumber != nil {
                backEditNumber!(true)
            }
        default:
            break
        }
    }

使用方法:

    private lazy var selectNumberView: EWSelectNumberView = {
       let view = EWSelectNumberView(frame: CGRect(x: 50, y: 200, width: 96, height: 24), defaultNumber: 99, maxNumber: 100)
        view.backEditNumber = { bool in
            var operation: String = bool == false ? "減" : "加"
            EWToast.showBottomWithText(text: "1號(hào):\(operation)")
            self.showLabel1.text = "\(view.selectedNumber)"
        }
        return view
    }()

加減號(hào)圖片我隨便找的,如果接入使用,可以自己修改為合適的圖片.


demo地址:EWSelectNumberView

有問(wèn)題歡迎探討.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末管宵,一起剝皮案震驚了整個(gè)濱河市截珍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌箩朴,老刑警劉巖岗喉,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異炸庞,居然都是意外死亡钱床,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門燕雁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鲸拥,你說(shuō)我怎么就攤上這事拐格。” “怎么了刑赶?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵捏浊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我撞叨,道長(zhǎng)金踪,這世上最難降的妖魔是什么浊洞? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮胡岔,結(jié)果婚禮上法希,老公的妹妹穿的比我還像新娘。我一直安慰自己靶瘸,他們只是感情好苫亦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怨咪,像睡著了一般屋剑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诗眨,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天唉匾,我揣著相機(jī)與錄音,去河邊找鬼匠楚。 笑死巍膘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的油啤。 我是一名探鬼主播典徘,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼益咬!你這毒婦竟也來(lái)了逮诲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤幽告,失蹤者是張志新(化名)和其女友劉穎梅鹦,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冗锁,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡齐唆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冻河。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箍邮。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叨叙,靈堂內(nèi)的尸體忽然破棺而出锭弊,到底是詐尸還是另有隱情,我是刑警寧澤擂错,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布味滞,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏剑鞍。R本人自食惡果不足惜昨凡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚁署。 院中可真熱鬧便脊,春花似錦、人聲如沸形用。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)田度。三九已至妒御,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镇饺,已是汗流浹背乎莉。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奸笤,地道東北人惋啃。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像监右,于是被迫代替她去往敵國(guó)和親边灭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,089評(píng)論 1 32
  • 問(wèn)答題47 /72 常見瀏覽器兼容性問(wèn)題與解決方案健盒? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,728評(píng)論 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5绒瘦? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,422評(píng)論 1 45
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔扣癣,今天18年5月份再次想寫文章惰帽,發(fā)現(xiàn)簡(jiǎn)書還為我保存起的...
    Jenaral閱讀 2,732評(píng)論 2 9
  • 2014年秋,黃子平教授在中國(guó)當(dāng)代文學(xué)第一堂課上說(shuō): “如果你因?yàn)檎Z(yǔ)文好父虑,喜歡文學(xué)而讀中文该酗,那么恭喜你誤入歧途∈亢浚”...
    樂(lè)一泓閱讀 217評(píng)論 0 0