iPhone How-to:如何更改UISwitch的提示文本
UISwitch(如下图)可以认为是其他UI库中Checkbox的替代品,但所呈现的内容更丰富,包括文本、颜色、动画。默认情况下,UISwitch的提示文本分别是ON和OFF,并很好地支持国际化以在不同区域语言下显示不同的文字,但由于无法定制导致在有些应用场景中显得不是很准确。比如在询问是否同意时希望提示文本可以是YES和NO,判断是否正确则应该是TRUE和FALSE等等。为此需要对UISwitch进行扩展。考虑到继承会导致控件继承关系太深,因此采用了Objective C的特性之一的Category。
实现的主要原理就是找到UISwitch中用于显示文本的UILabel控件并打标记以便在需要设定文本的时候访问到相应控件。
Category声明:
@interfaceUISwitch(CustomText) +(UISwitch*)switchWithLeftText:(NSString*)tag1andRight:(NSString*)tag2; @property(nonatomic,readonly)UILabel*label1; @property(nonatomic,readonly)UILabel*label2; @end
Category实现:
#defineTAG_OFFSET900 @implementationUISwitch(CustomText) -(void)locateAndTagAndTag:(UIView*)aViewwithCount:(int*)count { for(UIView*subviewin[aViewsubviews]) { if([subviewisKindOfClass:[UILabelclass]]) { *count+=1; [subviewsetTag:(TAG_OFFSET+*count)]; } else [selflocatelocateAndTagAndTag:subviewwithCount:count]; } } -(UILabel*)label1 { return(UILabel*)[selfviewWithTag:TAG_OFFSET+1]; } -(UILabel*)label2 { return(UILabel*)[selfviewWithTag:TAG_OFFSET+2]; } +(UISwitch*)switchWithLeftText:(NSString*)tag1andRight:(NSString*)tag2 { UISwitch*switchView=[[UISwitchalloc]initWithFrame:CGRectZero]; intlabelCount=0; [switchViewlocateAndTag:switchViewwithCount:&labelCount]; if(labelCount==2) { [switchView.label1setText:tag1]; [switchView.label2setText:tag2]; } return[switchViewautorelease]; } @end
在实际应用中,实例化定制的UISwitch的代码如下:
UISwitch*switch=[UISwitchswitchWithLeftText:@"YES"andRight:@"NO"];
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。