APP 的编程学习

8.编写Home页面 -PageTitleView 和PageC

2017-06-18  本文已影响255人  whong736

编写两个自定义控件之间的关联关系

1.监听PageTitleView中的点击

1.1将PageTitleView中点击逻辑进行处理

1.2告知PageContentView滚动到正确的控制器

// MARK:-监听Label的点击

extensionPageTitleView{

@objcfileprivatefunctitleLabelClick(_tapGes :UITapGestureRecognizer) {

// 0.获取当前Label

guardletcurrentLabel = tapGes.viewas?UILabelelse{return}

// 1.如果是重复点击同一个Title,那么直接返回

ifcurrentLabel.tag==currentIndex{return}

// 2.获取之前的Label

letoldLabel =titleLabels[currentIndex]

// 3.切换文字的颜色

currentLabel.textColor=UIColor(r:kSelectColor.0, g:kSelectColor.1, b:kSelectColor.2)

oldLabel.textColor=UIColor(r:kNormalColor.0, g:kNormalColor.1, b:kNormalColor.2)

// 4.保存最新Label的下标值

currentIndex= currentLabel.tag

// 5.滚动条位置发生改变

let scrollLineX =CGFloat(currentIndex) *scrollLine.frame.width

UIView.animate(withDuration:0.15, animations: {

self.scrollLine.frame.origin.x= scrollLineX

})

// 6.通知代理

delegate?.pageTitleView(self, selectedIndex:currentIndex)

}

}

// 0.获取当前Label

guardletcurrentLabel = tagGes.viewas?UILabelelse{return}

// 1.如果是重复点击同一个Title,那么直接返回

ifcurrentLabel.tag==currentIndex{return}

// 2.获取之前的Label

letoldLabel =titleLabels[currentIndex]

// 3.切换文字的颜色

currentLabel.textColor=UIColor(r:kSelectColor.0, g:kSelectColor.1, b:kSelectColor.2)

oldLabel.textColor=UIColor(r:kNormalColor.0, g:kNormalColor.1, b:kNormalColor.2)

// 4.保存最新Label的下标值

currentIndex= currentLabel.tag

// 5.滚动条位置发生改变

letscrollLineX =CGFloat(currentIndex) *scrollLine.frame.width

UIView.animate(withDuration:0.15, animations: {

self.scrollLine.frame.origin.x= scrollLineX

})

运行效果:点击不同的title ,下标会切换到不同的下标并改变颜色

为了PageTitleView能与下面的PageContentView进行联系,这里先把点击的到label的下标传递给HomeViewController,再由HomeViewController传递给PageContentView

通过代理进行实现这样的通信

// MARK:定义代理,只能被类遵守

protocolPageTitleViewDelegate:class{

funcpageTitleView(_titleView :PageTitleView, selectedIndex index :Int)

}

在类中进行定义代理

到HomeViewController 来成为PagetitleView的代理


点击不同的title 来显示点击到的index

extensionHomeViewController:PageTitleViewDelegate{

func pageTitleView(_titleView:PageTitleView, selectedIndex index:Int) {

pageContentView.setCurrentIndex(index)

}

}

来到PageContentView

fileprivate var isForbidScrollDelegate :Bool = false

运行效果:点击PageTitleView中的title,下面的PageContentViw 滑动到对应的选项

处理PageContentView滚动

遵循collection Delegate协议

//遵循collectionView的Delegate协议

extensionPageContentView:UICollectionViewDelegate{

funcscrollViewWillBeginDragging(_scrollView:UIScrollView) {

print("--")

}

}

测试监听滚动的事件 ,运行,滑动PageContentView 就会打印 --

定义:fileprivatevarisForbidScrollDelegate :Bool=false

上一篇 下一篇

猜你喜欢

热点阅读