iOS開(kāi)發(fā)筆記-針對(duì)Swift調(diào)用PPiFlatSegmentedControl項(xiàng)目的一些修改

PPiFlatSegmentedControl項(xiàng)目是一個(gè)很流行的開(kāi)源iOS控件庫(kù),提供了扁平化風(fēng)格(Flat style)的SegmentedControl,可以自定義segment的顏色,圖標(biāo)、大小等等,十分靈活美觀。
效果如下:


預(yù)覽效果

但是作為一個(gè)OC項(xiàng)目,在我們進(jìn)行OC和Swift混合編程時(shí),由于PPiFlatSegmentedControl的創(chuàng)建實(shí)例方法中使用了Block,產(chǎn)生了一些問(wèn)題。

思路:

首先,根據(jù)官方文檔,Swift中采用閉包來(lái)替代Block,但是我水平有限,使用閉包來(lái)調(diào)用時(shí),程序并不能正常運(yùn)行。同時(shí)Swift中的@Selector經(jīng)過(guò)驗(yàn)證是可以正常使用的,于是我采用了使用@Selector替代Block的方案。

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

1.修改/添加PPiFlatSegmentedControl源碼中的實(shí)例化方法
在這里,為PPiFlatSegmentedControl添加了全新的方法,其中最大變化是采用了@Selector。

- (id)initWithFrame:(CGRect)frame items:(NSArray*)items iconPosition:(IconPosition)position target:(id)target andSelection:(SEL)action;

同時(shí)根據(jù)需求,為PPiFlatSegmentedControl對(duì)象添加了target和selAction屬性。

@property (nonatomic) SEL selAction; @property (nonatomic) id target;

最后就是修改項(xiàng)目返回SelectIndex的方法segmentSelected:,這里有兩種方案可以采用,分別是objc_msgSend()和[id performSelector: withObject:]。

-(void)segmentSelected:(id)sender{ if(sender){ NSUInteger selectedIndex=[self.segments indexOfObject:sender]; [self setEnabled:YES forSegmentAtIndex:selectedIndex]; //Calling block if(self.selBlock){ self.selBlock(selectedIndex); } if(_selAction!=nil){ //objc_msgSend(_target,_selAction,[NSNumber numberWithInteger:selectedIndex],selectedIndex); [_target performSelector:_selAction withObject:[NSNumber numberWithInt:selectedIndex]]; } } }

到這里,我們對(duì)OC源碼的修改就完成了,下面進(jìn)行Swift調(diào)用的演示。

var data=[["text":"test1"],["text":"test2"]]; var segmentControl = PPiFlatSegmentedControl(frame: CGRectMake(SCREEN_WIDTH/4, 10, SCREEN_WIDTH/2, 25), items: data, iconPosition: IconPositionRight, target:self, andSelection:"segmentControlSelected:") segmentControl.color=TextServcie.getcolorfromHEX("#36b5fc") segmentControl.borderWidth=0 segmentControl.selectedColor=TextServcie.getcolorfromHEX("#0193e6") segmentControl.selectedTextAttributes=[NSFontAttributeName:UIFont.systemFontOfSize(13), NSForegroundColorAttributeName:UIColor.whiteColor()] segmentControl.textAttributes=[NSFontAttributeName:UIFont.systemFontOfSize(13), NSForegroundColorAttributeName:TextServcie.getcolorfromHEX("#0971b0")] self.navigationItem.titleView=segmentControl;

調(diào)用@Selector代碼:

func segmentControlSelected(index:NSNumber){ if(index.intValue==0){ switchToFoundation() }else{ switchToP2P() } }

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

PPiFlatSegmentedControl項(xiàng)目地址:https://github.com/pepibumur/PPiFlatSegmentedControl

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容