在做了一些阅读之后,我发现你可以在UISwitch控件上自定义文本和颜色。我很好奇这些方法是否会导致我的应用程序被批准并包含在App Store中时出现问题。
取自iPhone Developer's Cookbook Sample Code的示例代码:
// Custom font, color
switchView = [[UICustomSwitch alloc] initWithFrame:CGRectZero];
[switchView setCenter:CGPointMake(160.0f,260.0f)];
[switchView setLeftLabelText: @"Foo"];
[switchView setRightLabelText: @"Bar"];
[[switchView rightLabel] setFont:[UIFont fontWithName:@"Georgia" size:16.0f]];
[[switchView leftLabel] setFont:[UIFont fontWithName:@"Georgia" size:16.0f]];
[[switchView leftLabel] setTextColor:[UIColor yellowColor]];
答案 0 :(得分:40)
这不会在提交到应用商店时产生问题。只要您不使用任何私有(未记录的)API来构建/更改这些小部件,就可以使用自定义控件或内置控件的更改版本。
答案 1 :(得分:16)
您可能喜欢我自定义开关的实现(开源和免费使用)...它允许将开关设置为显示任何文本,或者轻松地将其子类化以在轨道中绘制您自己的自定义图像.... http://osiris.laya.com/projects/rcswitch/
这个开关可以很容易地绘制图像而不是文本:子类化主开关类并覆盖这样的绘制方法,你的图像将自动动画:
- (void)drawUnderlayersInRect:(CGRect)aRect withOffset:(float)offset inTrackWidth:(float)trackWidth
{
[onImage drawAtPoint:CGPointMake(floorf(aRect.origin.x + 13 + (offset - trackWidth)), floorf((self.bounds.size.height - onImage.size.height) / 2.0))];
[offImage drawAtPoint:CGPointMake(floorf(aRect.origin.x + 15.0 + (offset + trackWidth)), ceilf((self.bounds.size.height - offImage.size.height) / 2.0))];
}
答案 2 :(得分:1)
根本不需要UISwitch子类。 我实现的一个相当简单的解决方案是UIView,触摸事件在两个图像(ON / OFF)之间切换,幻灯片转换全部。
此致 Dhanesh
答案 3 :(得分:1)
我刚创建了这个视图,并看到了你的问题
希望这会有所帮助
.h文件:
#import <UIKit/UIKit.h>
@interface EDSwitch : UIView
{
UIButton* onButton,*offButton;
UIImageView* bg;
}
- (id)initWithText:(NSString*)on andText:(NSString*)off andDelegate:(id)delegate andOnSelector:(SEL)onSelector andOffSelector:(SEL)offSelector andBackgroundImage:(UIImage*)bgImage andStartingValue:(BOOL)b;
@end
和.m文件:
#import "EDSwitch.h"
@implementation EDSwitch
- (id)initWithText:(NSString*)on andText:(NSString*)off andDelegate:(id)delegate andOnSelector:(SEL)onSelector andOffSelector:(SEL)offSelector andBackgroundImage: (UIImage*)bgImage andStartingValue:(BOOL)b
{
self = [super initWithFrame:CGRectZero];
if (self) {
UILabel* onLabel = [[UILabel alloc] initWithFrame:CGRectMake(2, 8, 50, 20)];
onLabel.text = on ;
onLabel.tag = 1;
onLabel.font = [UIFont fontWithName:kCalibri size:15];
onLabel.textAlignment = UITextAlignmentCenter;
onLabel.textColor = [UIColor colorFromHexString:@"#009dd0"];
onLabel.backgroundColor = [UIColor clearColor];
[onLabel sizeToFit];
[onLabel setWidth:onLabel.frame.size.width + 4];
UILabel* offLabel = [[UILabel alloc] initWithFrame:CGRectMake(2, 8, 50, 20)];
offLabel.text = off ;
offLabel.tag = 1;
offLabel.textAlignment = UITextAlignmentCenter;
offLabel.font = [UIFont fontWithName:kCalibri size:15];
offLabel.textColor = [UIColor colorFromHexString:@"#009dd0"];
offLabel.backgroundColor = [UIColor clearColor];
[offLabel sizeToFit];
[offLabel setWidth:offLabel.frame.size.width + 4];
float high = MAX([offLabel.text sizeWithFont:offLabel.font].width,[onLabel.text sizeWithFont:onLabel.font].width) + 10;
onButton = [UIButton buttonWithType:UIButtonTypeCustom];
[onButton addTarget:self action:@selector(toggled:) forControlEvents:UIControlEventTouchUpInside];
[onButton addTarget:delegate action:onSelector forControlEvents:UIControlEventTouchUpInside];
offButton = [UIButton buttonWithType:UIButtonTypeCustom];
[offButton addTarget:self action:@selector(toggled:) forControlEvents:UIControlEventTouchUpInside];
[offButton addTarget:delegate action:offSelector forControlEvents:UIControlEventTouchUpInside];
[onButton setWidth:high];
[onButton setX:0];
[onButton addSubview:onLabel];
[onLabel setWidth:high];
[onLabel setX:0];
[offButton setWidth:high];
[offButton addSubview:offLabel];
[offButton setX:high];
[offLabel setWidth:high];
[offLabel setX:0];
bg = [[UIImageView alloc] initWithImage:bgImage];
self.frame = CGRectMake(200, 200 , (high*2), 34);
self.layer.borderColor = [[[UIColor colorFromHexString:@"#009dd0"] colorWithAlphaComponent:0.5] CGColor];
self.layer.borderWidth = 0.5;
self.layer.cornerRadius = 5;
[self setX:[UIApplication sharedApplication].keyWindow.frame.size.width - self.frame.size.width - 8];
[self addSubview:bg];
[bg setWidth:[self getWidth]];
[bg setHeight:[self getHeight]];
[self addSubview:onButton];
[self addSubview:offButton];
[onButton setHeight:[self getHeight]];
[offButton setHeight:[self getHeight]];
if(b){
[onButton setBackgroundColor:[UIColor clearColor]];
[offButton setBackgroundColor:[UIColor whiteColor]];
}
else{
[onButton setBackgroundColor:[UIColor whiteColor]];
[offButton setBackgroundColor:[UIColor clearColor]];
}
}
return self;
}
-(void)toggled:(UIButton*)sender{
if(sender == onButton){
UILabel* l = (UILabel*)[onButton viewWithTag:1];
l.textColor = [UIColor grayColor];
[onButton setBackgroundColor:[UIColor clearColor]];
l = (UILabel*)[offButton viewWithTag:1];
l.textColor = [UIColor colorFromHexString:@"#009dd0"];
[offButton setBackgroundColor:[UIColor whiteColor]];
}
else{
UILabel* l = (UILabel*)[offButton viewWithTag:1];
l.textColor = [UIColor grayColor];
[offButton setBackgroundColor:[UIColor clearColor]];
l = (UILabel*)[onButton viewWithTag:1];
l.textColor = [UIColor colorFromHexString:@"#009dd0"];
[onButton setBackgroundColor:[UIColor whiteColor]];
}
}
@end
用法:
[[UIApplication sharedApplication].keyWindow addSubview:[[EDSwitch alloc] initWithText:@"aksdjaksdjh" andText:@"dasjdsaj" andDelegate:self andOnSelector:@selector(logon) andOffSelector:@selector(logoff) andBackgroundImage:[UIImage imageNamed:@"toggleBottom.png"] andStartingValue:YES]];
活得长久,繁荣,
eiran
答案 4 :(得分:0)
来自Apple文档: -
您可以使用UISwitch类创建和管理您的On / Off按钮 例如,在首选项(设置)中查看此类服务 飞行模式。这些对象称为开关。
UISwitch类声明了一个属性和一个控制它的方法 开/关状态。与UISlider一样,当用户操作开关时 控制(“翻转”它)生成UIControlEventValueChanged事件, 这导致控制(如果配置正确)发送 行动信息。
UISwitch类不可自定义。
Apple说它们不可自定义,这可能意味着您的应用被拒绝了。
答案 5 :(得分:0)
在Apple人机界面指南中,在Switch文档中,Apple声明:
使用表格行中的开关为用户提供两个简单的,直径的 反对确定某事物状态的选择,例如是/否 或开/关。使用可预测的值对,以便用户无法使用 滑动控件以发现其他值是什么。
所以,是的,只要您使用可预测的一对值(例如是/否),就可以更改文本。
答案 6 :(得分:-30)
这会导致您的应用批准出现问题。问我怎么知道:P
我今天刚收到苹果公司的一份令人讨厌的消息。我们正在寻找替代方案。