您好,登錄后才能下訂單哦!
UISwitch(如下圖)可以認為是其他UI庫中Checkbox的替代品,但所呈現的內容更豐富,包括文本、顏色、動畫。默認情況下,UISwitch的提示文本分別是ON和OFF,并很好地支持國際化以在不同區域語言下顯示不同的文字,但由于無法定制導致在有些應用場景中顯得不是很準確。比如在詢問是否同意時希望提示文本可以是YES和NO,判斷是否正確則應該是TRUE和FALSE等等。為此需要對UISwitch進行擴展。考慮到繼承會導致控件繼承關系太深,因此采用了Objective C的特性之一的Category。
實現的主要原理就是找到UISwitch中用于顯示文本的UILabel控件并打標記以便在需要設定文本的時候訪問到相應控件。
Category聲明:
- @interface UISwitch (CustomText)
- + (UISwitch *) switchWithLeftText: (NSString *) tag1 andRight: (NSString *) tag2;
- @property (nonatomic, readonly) UILabel *label1;
- @property (nonatomic, readonly) UILabel *label2;
- @end
Category實現:
- #define TAG_OFFSET 900
- @implementation UISwitch (CustomText)
- - (void) locateAndTagAndTag: (UIView *) aView withCount:(int *) count
- {
- for (UIView *subview in [aView subviews])
- {
- if ([subview isKindOfClass:[UILabel class]])
- {
- *count += 1;
- [subview setTag:(TAG_OFFSET + *count)];
- }
- else
- [self locatelocateAndTagAndTag:subview withCount:count];
- }
- }
- - (UILabel *) label1
- {
- return (UILabel *) [self viewWithTag:TAG_OFFSET + 1];
- }
- - (UILabel *) label2
- {
- return (UILabel *) [self viewWithTag:TAG_OFFSET + 2];
- }
- + (UISwitch *) switchWithLeftText: (NSString *) tag1 andRight: (NSString *) tag2
- {
- UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
- int labelCount = 0;
- [switchView locateAndTag:switchView withCount:&labelCount];
- if (labelCount == 2)
- {
- [switchView.label1 setText:tag1];
- [switchView.label2 setText:tag2];
- }
- return [switchView autorelease];
- }
- @end
在實際應用中,實例化定制的UISwitch的代碼如下:
- UISwitch *switch = [UISwitch switchWithLeftText:@"YES" andRight:@"NO"];
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。