注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

罔少年

QQ 332256483

 
 
 

日志

 
 

Swift 滑动选项卡  

2015-10-08 15:30:29|  分类: swift |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Swift 滑动选项卡 - 我是小黄人 - lanaiver6291的博客
 
实现方式
UIScrollView + UIButton

直接上代码

import UIKit

var topScrollView = UIScrollView()

var navigationBarHeight: CGFloat = 0

//选项卡内容

let topTitles = ["每日焦点", "行业资讯", "国际资讯", "原创头条", "人物访谈", "中塑专题", "产品导购", "图说塑界"]

//选项卡所有按钮,选中状态

var topButtons = [UIButton]()

//选项卡选中下标

var selectedIndex = 0

class InfoMainViewController: UIViewController, UIScrollViewDelegate {

    override func viewDidLoad() {

        super.viewDidLoad()


        navigationBarHeight = (self.navigationController?.navigationBar.frame.size.height)!


        self.view.backgroundColor = RGBA(240, 240, 240, 1)


        //在有navigationview中,设置布局坐标从顶部开始

        self.edgesForExtendedLayout = UIRectEdge.None    

   

        //默认true,遇到scrollView,会自动留白

//        self.automaticallyAdjustsScrollViewInsets = true

      addTopView()


    }

    

    func addTopView() {        

        

topScrollView.delegate = self

        

        topScrollView.frame = CGRectMake(0, 0, self.view.frame.width, 40)

        

        topScrollView.backgroundColor = RGBA(247, 247, 247, 1)

        

        //滚动范围

        topScrollView.contentSize = CGSizeMake(2 * self.view.frame.width, 0)

        

        //是否翻页滚动

        topScrollView.pagingEnabled = false

        

        topScrollView.directionalLockEnabled = true    

   

        //是否反弹

        topScrollView.bounces = false

        

        //是否显示水平滚动条

        topScrollView.showsHorizontalScrollIndicator = false

        

        //是否显示垂直滚动条

        topScrollView.showsVerticalScrollIndicator = false


        self.view.addSubview(topScrollView)


        let curSize = topTitles.count


      for(var i=0; i<curSize; i++) {


           let curButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton


          curButton.frame = CGRectMake(CGFloat(i)*80, 0, 80, 40)


           curButton.setTitle(topTitles[i], forState: UIControlState.Normal)


           curButton.titleLabel!.font = UIFont.systemFontOfSize(13)


          curButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)


            curButton.setTitleColor(UIColor.redColor(), forState: UIControlState.Selected)


            curButton.addTarget(self, action: "topButtonClicks:", forControlEvents: UIControlEvents.TouchUpInside)


            curButton.tag = i


          topButtons.append(curButton)


            topScrollView.addSubview(curButton)


          if(i == 0) {

                curButton.selected = true

                selectedIndex = 0;

            }

        }

    

    }


  //选项卡选中事件

    func topButtonClicks(sender: UIButton) {

        

        let index = sender.tag

        

        //设置选中状态

        sender.selected = true


        //设置上一个选中状态为未选中

        topButtons[selectedIndex].selected = false


        //当前选择状态

        selectedIndex = index


        switch index {


        case 1:


            println("\(index)")


        default:


             println("")

            

        }


    }


    func scrollViewDidEndDecelerating(scrollView: UIScrollView) {


    }


这里有2个注意点:
1、如果ViewController有NavigationBar,那么默认坐标系是从顶部开始,没有剪掉NavigationBar的高度的
所以需要设置ViewController的内容坐标从NavigationBar底部开始

self.edgesForExtendedLayout = UIRectEdge.None  

2、设置UIButton选中状态

curButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)

curButton.setTitleColor(UIColor.redColor(), forState: UIControlState.Selected)

只能在选中一瞬间改变颜色,如果需要选中后变成红色,非选中默认色

1、用一个数组,把所有按钮放进去,然后在UIButton的事件中,把所有其他按钮变成非选中状态,选中按钮为选中状态
2、用一个数组,把所有按钮放进去,然后在UIButton的事件中,把上一个选中按钮变成非选中状态,选中按钮为选中状态

第一种方法需要for 这个数组,然后在for中判断,如果是当前按钮,则改为选中状态,其他改为非选中状态,感觉比较耗性能,这里不写代码了

第二种,只需要把上一个状态改成非选中,定义一个全局var selectedIndex = 0
然后在UIButton事件中,注意在当前选中按钮状态改变以后,然后再把选中按钮下表赋值給selectedIndex,这样记录的就是上一个按钮的下标

   var selectedIndex = 0


//选项卡选中事件

    func topButtonClicks(sender: UIButton) {

        

        let index = sender.tag

        

        //设置选中状态

        sender.selected = true


        //设置上一个选中状态为未选中

        topButtons[selectedIndex].selected = false


//当前选择状态

        selectedIndex = index

}

  评论这张
 
阅读(199)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017