Swift4.0學(xué)習(xí)筆記(十一)——分段選擇控件(UISegmentedControl)

1.定義控件

先舉一個純文本的實例

let tags = ["理財","轉(zhuǎn)讓","預(yù)約"] as [Any]
let segmented = UISegmentedControl(items: tags)
segmented.layer.position = CGPoint(x: self.view.bounds.size.width/2, y: 100)
segmented.selectedSegmentIndex = 0//默認(rèn)第一個被選中
        
self.view.addSubview(segmented)
定義控件

再舉一個純圖片的例子云挟,當(dāng)然圖片和文本可以一起用

let tags = [UIImage(named: "voice-")!,UIImage(named: "voice")!,UIImage(named: "voice+")!] as [Any]
圖片items
2.添加事件
segmented.addTarget(self, action: #selector(segmentDidchange(_:)), for: .valueChanged)

@objc func segmentDidchange(_ sender: UISegmentedControl){
        print("index:\(sender.selectedSegmentIndex); title:\(sender.titleForSegment(at: sender.selectedSegmentIndex))")
    }
添加事件
3.添加和刪除選項
let tags = ["理財","轉(zhuǎn)讓","預(yù)約"] as [Any]
let segmented = UISegmentedControl(items: tags)
segmented.layer.position = CGPoint(x: self.view.bounds.size.width/2, y: 100)
segmented.selectedSegmentIndex = 0//默認(rèn)第一個被選中
segmented.addTarget(self, action: #selector(segmentDidchange(_:)), for: .valueChanged)
        
//添加文字選項
segmented.insertSegment(withTitle: "借款", at: 2, animated: true)
//添加圖片選項
segmented.insertSegment(with: UIImage(named:"alarm")!, at: 3, animated: true)
//刪除選項
segmented.removeSegment(at: 0, animated: true)
        
self.view.addSubview(segmented)
增刪選項
4.修改選項文字和顏色
let tags = ["理財","轉(zhuǎn)讓","預(yù)約"] as [Any]
let segmented = UISegmentedControl(items: tags)
segmented.layer.position = CGPoint(x: self.view.bounds.size.width/2, y: 100)
segmented.selectedSegmentIndex = 0//默認(rèn)第一個被選中
segmented.addTarget(self, action: #selector(segmentDidchange(_:)), for: .valueChanged)
        
//添加圖片選項
segmented.insertSegment(with: UIImage(named:"alarm")!, at: 3, animated: true)
segmented.tintColor = UIColor.red
segmented.setTitle("理財", forSegmentAt: 1)
    
self.view.addSubview(segmented)
修改選項樣式
5.保留圖片顏色

上面一步操作圖片的顏色也一起被設(shè)置成了紅色(原本藍(lán)色)忆畅,大多數(shù)情況是不希望圖片顏色被修改,可以通過下面的方法保留圖片原來的顏色

segmented.setImage(UIImage(named:"alarm")?.withRenderingMode(.alwaysOriginal), forSegmentAt: 3)
保留圖片原色
6.修改選項文本偏移量
segmented.setContentOffset(CGSize(width:3, height:2), forSegmentAt: 1)
修改偏移量

可以把值設(shè)置為負(fù)數(shù)

segmented.setContentOffset(CGSize(width:-3, height:2), forSegmentAt: 1)
修改偏移量1
使用Segmented Control實現(xiàn)多個View切換
1.實現(xiàn)原理

通過不同view的偏移量來實現(xiàn)view的切換

2.先定義兩個簡單的view

FirstView.swift

import UIKit
class FirstView: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.green
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
        label.text = "第一個Segment"
        label.textColor = UIColor.black
        self.addSubview(label)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

SecondView.swift

import UIKit
class SecondView: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = UIColor.yellow
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
        label.text = "第二個Segment"
        self.addSubview(label)
        
        
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
3.實現(xiàn)view加載
import UIKit

class ViewController: UIViewController, UIScrollViewDelegate {

    var segmented: UISegmentedControl!
    var scrollView: UIScrollView!
    
    var firstView : FirstView!
    var secondView: SecondView!
    
    var width: CGFloat!
    var height: CGFloat!
    override func viewDidLoad() {
        super.viewDidLoad()
       let tags = ["理財","轉(zhuǎn)讓"] as [Any]
        width = self.view.bounds.size.width
        height = self.view.bounds.size.height
        segmented = UISegmentedControl(items: tags)
        segmented.layer.position = CGPoint(x: self.view.bounds.size.width/2, y: 50)
        segmented.selectedSegmentIndex = 0//默認(rèn)第一個被選中
        segmented.addTarget(self, action: #selector(segmentDidchange(_:)), for: .valueChanged)
        self.view.addSubview(segmented)
        
        scrollView = UIScrollView(frame: CGRect(x: 0, y: 80, width: width, height: height - 80 ))
        scrollView.delegate = self
        scrollView.isPagingEnabled = true
        scrollView.contentSize = CGSize(width: width * 2, height: height - 80 )
        self.view.addSubview(scrollView)
        
        firstView = FirstView(frame: CGRect(x: 0, y: 0, width: width, height: height - 80))
        scrollView.addSubview(firstView)
        //第二個view的x坐標(biāo)是從屏幕的寬度開始
        secondView = SecondView(frame: CGRect(x: width, y: 0, width: width, height: height - 80))
        scrollView.addSubview(secondView)
        
    }
    
    @objc func segmentDidchange(_ sender: UISegmentedControl){
        if sender.selectedSegmentIndex == 0 {
            scrollView.contentOffset.x = 0
        }else{
            scrollView.contentOffset.x = width
        }
    }
   
    func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
        self.view.endEditing(true)
        
    }
    
    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        if scrollView.contentOffset.x >= width {
            segmented.selectedSegmentIndex = 1
        }else{
            segmented.selectedSegmentIndex = 0
        }
    }
}
用例

上面實現(xiàn)的效果也可以通過滑動底部的view來切換view蕾管,截屏的時候忘了演示

上面講述了UISegmented Control基本的用法,以及其在具體應(yīng)用中的一個實例,當(dāng)然上面的例子這種實現(xiàn)方式只是此類功能的一種實現(xiàn)思路古劲,小伙伴們可以搜集一些資料,尋找一些功能性更強(qiáng)浙踢,效果更優(yōu)美的實現(xiàn)方式绢慢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市洛波,隨后出現(xiàn)的幾起案子胰舆,更是在濱河造成了極大的恐慌,老刑警劉巖蹬挤,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缚窿,死亡現(xiàn)場離奇詭異,居然都是意外死亡焰扳,警方通過查閱死者的電腦和手機(jī)倦零,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吨悍,“玉大人扫茅,你說我怎么就攤上這事∮希” “怎么了葫隙?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長躏仇。 經(jīng)常有香客問我恋脚,道長腺办,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任糟描,我火速辦了婚禮怀喉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘船响。我一直安慰自己躬拢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布灿意。 她就那樣靜靜地躺著估灿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缤剧。 梳的紋絲不亂的頭發(fā)上馅袁,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機(jī)與錄音荒辕,去河邊找鬼汗销。 笑死,一個胖子當(dāng)著我的面吹牛抵窒,可吹牛的內(nèi)容都是我干的弛针。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼李皇,長吁一口氣:“原來是場噩夢啊……” “哼削茁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起掉房,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤茧跋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卓囚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘾杭,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年哪亿,在試婚紗的時候發(fā)現(xiàn)自己被綠了粥烁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝇棉,死狀恐怖讨阻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情篡殷,我是刑警寧澤变勇,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響搀绣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜戳气,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一链患、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓶您,春花似錦麻捻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至夜赵,卻和暖如春明棍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寇僧。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工摊腋, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘁傀。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓兴蒸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親细办。 傳聞我的和親對象是個殘疾皇子橙凳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,724評論 2 351

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

  • 嗯哼嗯哼蹦擦擦~~~ 轉(zhuǎn)載自:https://github.com/Tim9Liu9/TimLiu-iOS 目錄 ...
    philiha閱讀 4,860評論 0 6
  • 什么叫天才? 小白解釋為:天賦的才能笑撞;卓絕的創(chuàng)造力岛啸、想象力、靈感娃殖;天造之才值戳。 這么說,好像還看得懂炉爆。 但是過往的歷...
    小揚(yáng)輕輕閱讀 138評論 0 0
  • 以前會害怕時間會侵蝕彼此的情意。 原來這樣的擔(dān)心是有必要的芬首,工作的忙碌與生活的庸擾,都會慢慢侵蝕一個人的內(nèi)心郁稍,可能...
    吳術(shù)閱讀 183評論 0 0
  • 之前大略知道這本書是講企業(yè)管理的赦政,覺得可能會比較高大上、貌似看得懂但是又不知如何落地恢着。 但是讀了一部分就被吸引了,...
    產(chǎn)品靜靜閱讀 324評論 0 0