自定义UISwitch& App Store批准

时间:2009-03-29 15:50:22

标签: iphone objective-c

在做了一些阅读之后,我发现你可以在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]]; 

7 个答案:

答案 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

我今天刚收到苹果公司的一份令人讨厌的消息。我们正在寻找替代方案。